作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我知道 API 状态“用于使用 SQL 映射的线程安全客户端”,但我想了解它如何更好地工作,并且想知道是否有人在具有事务的多线程环境中运行它。例如使用:
void doSomeSql() throws SQLException{
sqlMapper.startTransaction();
sqlMapper.startBatch();
final Map paramMap = new HashMap();
paramMap.put("data", "data");
Integer num = (Integer) sqlMapper.queryForObject("getRowCount", paramMap);//get row count
sqlMapper.insert("insertData", paramMap); //insert row
num = (Integer) sqlMapper.queryForObject("getRowCount", paramMap);//get row count again
sqlMapper.executeBatch();
sqlMapper.commitTransaction();
}
如果在多个线程可以调用它的地方使用它,并且只有一个共享的 sqlMapper 对象,是否会有一些线程正在执行批处理,因为另一个线程调用了 executeBatch()?如果我有很多其他方法在其他线程中使用相同的 sqlMapper 进行删除更新等,这将成为一个更大的问题。
我不想在一个线程中启动一个事务,并在前一个线程完成之前让另一个线程提交。
我知道我可以同步所有这些,但宁愿不必。
最佳答案
在内部,org.ibatis.sqlmap.engine.impl.SqlMapClientImpl
uses a ThreadLocal
存储它的内部 session ,所以即使许多线程共享相同的 SqlMapClient
引用,the class uses a different internal object for each thread .
关于java - iBatis SqlMapClient 和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3319015/
我是一名优秀的程序员,十分优秀!