在 MyBatis 中,SqlSession 是其核心接口。在 MyBatis 中有两个实现类,DefaultSqlSession 和 SqlSessionManager。
SqlSessionFactory,顾名思义就是获取SqlSession对象的工厂,功能类似于JDBC中加载数据库驱动。所以SqISessionFactory对象一旦被创建,应该在应用执行期间都存在,因此SqlSessionFactory的最佳作用域是应用范围,建议定义为静态变量。
SqlSession类似于JDBC的connection对象,每个线程都应该有自己的SqlSession实例。SqlSession的实例不能共享,它是线程不安全的。因此最佳作用域是请求或方法范围。SqlSession对象能够执行数据库的增删改查操作,因此在使用后应该关闭,并确保使用finally块来关闭它。
- // 1.mybatis配置文件
- String resources = "mybatis.xml";
- // 2.获取Reader对象
- Reader resourceAsReader = Resources.getResourceAsReader(resources);
- // 3.获取SqlSessionFactoryBuilder
- SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader);
- // 4.创建对应的session
- SqlSession sqlSession = build.openSession();
创建sqlsession经过了以下几个主要步骤:
从配置中获取Environment;
从Environment中取得DataSource;
从Environment中取得TransactionFactory;
从DataSource里获取数据库连接对象Connection;
在取得的数据库连接上创建事务对象Transaction;
创建Executor对象(该对象非常重要,事实上sqlsession的所有操作都是通过它完成的);
创建sqlsession对象。