- SqlSessionFactory 用于创建 SqlSession 对象,而 SqlSession 用于操作数据库。
- SqlSessionFactory 对象的实例可以通过 SqlSessionFactoryBuilder 对象类获得 , 而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例,每一个 MyBatis 的应用程序都以一个 SqlSessionFactory 对象的实例为核心
- SqlSessionFactory可以通过配置文件或者Java代码来创建,并且可以被多个线程共享使用。
- SqlSessionFactory 是线程安全的,它一旦被创建,应该在应用执行期间都存在。在MyBatis中,SqlSessionFactory通常只需要被创建一次,并且可以在整个应用程序生命周期内重复使用。因此,它通常被设计为单例模式。
- SqlSessionFactory 有以下方法:
方法 |
说明 |
||||||||
openSession() |
创建一个SqlSession对象,但是不会自动提交 |
||||||||
openSession(boolean autoCommit) |
创建一个SqlSession对象,同时设置是否自动提交,autoCommit 可选参数传递 true 值即可开启自动提交功能 |
||||||||
openSession(Connection connection) |
该方法需要传入一个java.sql.Connection类型的参数,表示要使用的JDBC连接。如果传入的连接已经被打开,则该方法不会关闭它;如果传入的连接没有被打开,则该方法会在SqlSession关闭时自动关闭它
若要使用自己的 Connection 实例,传递一个 Connection 实例给 connection 参数即可 |
||||||||
openSession(TransactionIsolationLevel level) |
设置事务隔离级别。该方法需要传入一个TransactionIsolationLevel类型的参数,表示要使用的事务隔离级别。
使用此方法创建SqlSession对象时,会自动开启事务,并且在操作完成后自动提交或回滚事务 |
||||||||
openSession(ExecutorType execType) |
设置 SQL 执行器。 该方法需要传入一个ExecutorType类型的参数,表示要使用的执行器类型。MyBatis下面支持三种执行器类型
创建SqlSession 对象时,默认情况下会使用SIMPLE执行器 |
||||||||
openSession(ExecutorType execType, boolean autoCommit) |
设置 SQL 执行器,同时设置是否自动提交,autoCommit 可选参数传递 true 值即可开启自动提交功能
该方法需要传入一个ExecutorType类型的参数,表示要使用的执行器类型。MyBatis下面支持三种执行器类型
创建SqlSession 对象时,默认情况下会使用SIMPLE执行器 |
||||||||
openSession(ExecutorType execType, TransactionIsolationLevel level) |
设置 SQL 执行器,同时设置事务隔离级别
传入一个ExecutorType类型的参数,表示要使用的执行器类型。MyBatis下面支持三种执行器类型
创建SqlSession 对象时,默认情况下会使用SIMPLE执行器
同时需要传入一个TransactionIsolationLevel类型的参数,表示要使用的事务隔离级别。
使用此方法创建SqlSession对象时,会自动开启事务,并且在操作完成后自动提交或回滚事务 |
||||||||
openSession(ExecutorType execType, Connection connection) |
设置 SQL 执行器,同时传入一个java.sql.Connection类型的参数,表示要使用的JDBC连接
该方法需要传入一个java.sql.Connection类型的参数,表示要使用的JDBC连接。如果传入的连接已经被打开,则该方法不会关闭它;如果传入的连接没有被打开,则该方法会在SqlSession关闭时自动关闭它
若要使用自己的 Connection 实例,传递一个 Connection 实例给 connection 参数即可
该方法需要传入一个ExecutorType类型的参数,表示要使用的执行器类型。MyBatis下面支持三种执行器类型
创建SqlSession 对象时,默认情况下会使用SIMPLE执行器
同时需要传入一个java.sql.Connection类型的参数,表示要使用的JDBC连接。如果传入的连接已经被打开,则该方法不会关闭它;如果传入的连接没有被打开,则该方法会在SqlSession关闭时自动关闭它 |
||||||||
getConfiguration() |
获取当前使用的全局设置(Configuration)对象,返回一个 Configuration 实例,可以在运行时使用它来检查 MyBatis 的配置
在MyBatis中,每个SqlSessionFactory都会有一个独立的Configuration对象。因此,在创建SqlSession时,如果需要对Configuration进行修改,则需要先获取到当前SqlSessionFactory使用的Configuration对象,并在其上进行修改。 |
示例
public class MyBatisUtils {
private SqlSession sqlSession;
private static SqlSessionFactory sqlSessionFactory = null;
static {
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH);
} catch (IOException e) {
e.printStackTrace();
}
}
}