iBatis SqlMapClient和线程安全

Nic*_*ick 5 java ibatis

我知道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();
}
Run Code Online (Sandbox Code Playgroud)

如果这被用于多个线程可以调用它的地方并且只有一个共享的sqlMapper对象会有一些线程正在执行批处理,因为另一个线程调用了executeBatch()?如果我在其他线程中使用相同的sqlMapper进行删除更新等许多其他方法,这就成了一个问题.

我不想在一个线程中启动事务,并在上一个线程完成之前有另一个线程提交.

我知道我可以同步所有这些,但宁愿不必.

mat*_*t b 6

在内部,org.ibatis.sqlmap.engine.impl.SqlMapClientImpl 使用aThreadLocal来存储它的内部会话,因此即使许多线程共享相同的SqlMapClient引用,该类也为每个线程使用不同的内部对象.