gpt4 book ai didi

java - iBatis SqlMapClient 和线程安全

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:05 24 4
gpt4 key购买 nike

我知道 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com