SqlSessionFactory
有六个方法创建 SqlSession
实例。通常来说,当你选择其中一个方法时,你需要考虑以下几点:
session
作用域中使用事务作用域,还是使用自动提交(auto-commit
)?(对很多数据库和/或 JDBC 驱动来说,等同于关闭事务支持)PreparedStatement
和/或批量更新语句(包括插入语句和删除语句)吗?基于以上需求,有下列已重载的多个 openSession()
方法供使用。
SqlSession openSession()
SqlSession openSession(boolean autoCommit)
SqlSession openSession(Connection connection)
SqlSession openSession(TransactionIsolationLevel level)
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level)
SqlSession openSession(ExecutorType execType)
SqlSession openSession(ExecutorType execType, boolean autoCommit)
SqlSession openSession(ExecutorType execType, Connection connection)
Configuration getConfiguration();
默认的 openSession()
方法没有参数,它会创建具备如下特性的 SqlSession
:
DataSource
实例中获取 Connection
对象。相信你已经能从方法签名中知道这些方法的区别。向 autoCommit
可选参数传递 true
值即可开启自动提交功能。若要使用自己的 Connection
实例,传递一个 Connection
实例给 connection
参数即可。注意,我们没有提供同时设置 Connection
和 autoCommit
的方法,这是因为 MyBatis 会依据传入的 Connection
来决定是否启用 autoCommit
。对于事务隔离级别,MyBatis 使用了一个 Java 枚举包装器来表示,称为 TransactionIsolationLevel
,事务隔离级别支持 JDBC 的五个隔离级别(NONE
、READ_UNCOMMITTED
、READ_COMMITTED
、REPEATABLE_READ
和 SERIALIZABLE
),并且与预期的行为一致。
你可能对 ExecutorType
参数感到陌生。这个枚举类型定义了三个值:
ExecutorType.SIMPLE
:该类型的执行器没有特别的行为。它为每个语句的执行创建一个新的预处理语句。ExecutorType.REUSE
:该类型的执行器会复用预处理语句。ExecutorType.BATCH
:该类型的执行器会批量执行所有更新语句,如果 SELECT
在多个更新中间执行,将在必要时将多条更新语句分隔开来,以方便理解。在 SqlSessionFactory
中还有一个方法我们没有提及,就是 getConfiguration()
。这个方法会返回一个 Configuration
实例,你可以在运行时使用它来检查 MyBatis 的配置。
如果你使用过 MyBatis 的旧版本,可能还记得 session
、事务和批量操作是相互独立的。在新版本中则不是这样。上述三者都包含在 session
作用域内。你不必分别处理事务或批量操作就能得到想要的全部效果。
拦截器你已经学到,在 Hibernate 中,一个对象将被创建和保持。一旦对象已经被修改,它必须被保存到数据库里。这个过程持续直到...
Spring JDBC 示例想要理解带有 jdbc 模板类的 Spring JDBC 框架的相关概念,让我们编写一个简单的示例,来实现下述 Student 表的...
Spring 异常处理例子下面的例子说明了如何使用 Spring MVC 框架来编写一个简单的基于 web 的应用程序,它可以处理它的内置控制器...
你已经学会如何使用bean元素来声明 bean 和通过使用 XML 配置文件中的constructor-arg和property元素来注入 。Spring 容器可以在...
HTTP请求与HTTP响应的格式相近,都有着如下结构:以状态行+CRLF(回车换行)开始零行或多行头模块+CRLF一个空行,比如CRLF可选的...