java - Mybatis。提交后可以重用 session 吗?

标签 java transactions mybatis

我的问题很简单。像这样提交事务后, session 是否可以重用?

try (SqlSession session = sqlSessionFactory.openSession()) {
// following 3 lines pseudocode for "doing some work"
  session.insert(...);
  session.update(...);
  session.delete(...);
  session.commit();

  session.insert();
  session.commit();
}

还是在提交后关闭 session 并打开一个新 session 更好?

最佳答案

我也是刚刚开始使用 MyBatis,并且有一个关于 session 管理的类似问题。以下是我到目前为止学到的内容:

  1. session 应在完成交易所需的时间内保持打开状态,然后关闭。
  2. MyBatis 提供 session 级别的“本地”缓存,这可能对您的应用程序的性能有益。当然,这取决于您的应用程序的设计,但通常您保持 session Activity 的时间越长,您的缓存就越好。 (MyBatis 处理提交和回滚时的缓存刷新。)

对于您的简单示例,可以为这两个事务保持 session 打开。在整个 DAO 层有效地使用 MyBatis session 意味着在这两个准则之间找到平衡。

花时间阅读有关 session 管理和缓存的官方文档:https://mybatis.github.io/mybatis-3/java-api.html#sqlSessions

关于java - Mybatis。提交后可以重用 session 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32661750/

相关文章:

java - 使用 Java 获取远程计算机(桌面或服务器)系统配置和使用参数

activerecord - Yii2 在单个事务中的单个保存调用中保存相关记录

mysql - 如何处理链接同一实体的多个列

MySQL InnoDB : Difference Between `FOR UPDATE` and `LOCK IN SHARE MODE`

java - 如何在mybatis中为Set<MyEnum>指定typeHandler?

java - 自动获取SQL查询中要使用的列(Hibernate/Mybatis/自制)? - 创建图书馆的想法

java - 在 SWT 中验证文本并尝试清除它但不起作用

java - 我可以将手动实例化与 Autowiring 结合起来吗?

java - 是否有一些对象或数据类型可以被 Java 自动序列化(无需实现 Serialized)?

transactions - 集群模式下spring data redis是否支持事务(multi,exec)?