会话工厂(SqlSessionFactory)

Exisi 2021-03-27 07:14:45
Categories: Tags:
  • 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类型的参数,表示要使用的事务隔离级别。

  • NONE
  • READ_UNCOMMITTED
  • READ_COMMITTED
  • REPEATABLE_READ
  • SERIALIZABLE

使用此方法创建SqlSession对象时,会自动开启事务,并且在操作完成后自动提交或回滚事务

openSession(ExecutorType execType)

设置 SQL 执行器。

该方法需要传入一个ExecutorType类型的参数,表示要使用的执行器类型。MyBatis下面支持三种执行器类型

SQL 执行器

描述

ExecutorType.SIMPLE

该类型的执行器为每个语句的执行创建一个statement,用完后关闭。

ExecutorType.REUSE

该类型的执行器是可重用执行器,将statement存入map中,操作map中的statement而不会重复创建statement

ExecutorType.BATCH

该类型的执行器是批处理型执行器,doUpdate预处理存储过程或批处理操作,doQuery提交并执行过程

创建SqlSession 对象时,默认情况下会使用SIMPLE执行器

openSession(ExecutorType execType, boolean autoCommit)

设置 SQL 执行器,同时设置是否自动提交,autoCommit 可选参数传递 true 值即可开启自动提交功能

 

该方法需要传入一个ExecutorType类型的参数,表示要使用的执行器类型。MyBatis下面支持三种执行器类型

SQL 执行器

描述

ExecutorType.SIMPLE

该类型的执行器为每个语句的执行创建一个statement,用完后关闭。

ExecutorType.REUSE

该类型的执行器是可重用执行器,将statement存入map中,操作map中的statement而不会重复创建statement

ExecutorType.BATCH

该类型的执行器是批处理型执行器,doUpdate预处理存储过程或批处理操作,doQuery提交并执行过程

创建SqlSession 对象时,默认情况下会使用SIMPLE执行器

openSession(ExecutorType execType, TransactionIsolationLevel level)

设置 SQL 执行器,同时设置事务隔离级别

 

传入一个ExecutorType类型的参数,表示要使用的执行器类型。MyBatis下面支持三种执行器类型

SQL 执行器

描述

ExecutorType.SIMPLE

该类型的执行器为每个语句的执行创建一个statement,用完后关闭。

ExecutorType.REUSE

该类型的执行器是可重用执行器,将statement存入map中,操作map中的statement而不会重复创建statement

ExecutorType.BATCH

该类型的执行器是批处理型执行器,doUpdate预处理存储过程或批处理操作,doQuery提交并执行过程

创建SqlSession 对象时,默认情况下会使用SIMPLE执行器

 

同时需要传入一个TransactionIsolationLevel类型的参数,表示要使用的事务隔离级别。

  • NONE
  • READ_UNCOMMITTED
  • READ_COMMITTED
  • REPEATABLE_READ
  • SERIALIZABLE

使用此方法创建SqlSession对象时,会自动开启事务,并且在操作完成后自动提交或回滚事务

openSession(ExecutorType execType, Connection connection)

设置 SQL 执行器,同时传入一个java.sql.Connection类型的参数,表示要使用的JDBC连接

 

该方法需要传入一个java.sql.Connection类型的参数,表示要使用的JDBC连接。如果传入的连接已经被打开,则该方法不会关闭它;如果传入的连接没有被打开,则该方法会在SqlSession关闭时自动关闭它

 

若要使用自己的 Connection 实例,传递一个 Connection 实例给 connection 参数即可

 

该方法需要传入一个ExecutorType类型的参数,表示要使用的执行器类型。MyBatis下面支持三种执行器类型

SQL 执行器

描述

ExecutorType.SIMPLE

该类型的执行器为每个语句的执行创建一个statement,用完后关闭。

ExecutorType.REUSE

该类型的执行器是可重用执行器,将statement存入map中,操作map中的statement而不会重复创建statement

ExecutorType.BATCH

该类型的执行器是批处理型执行器,doUpdate预处理存储过程或批处理操作,doQuery提交并执行过程

创建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();

        }

    }

}

 

 

 

来自 <https://mybatis.org/mybatis-3/zh/java-api.html>