SqlSession 的创建需要借助于 SqlSessionFactory。SqlSessionFactory 是 Mybatis 的关键对象。每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。如下图所示:
SqlSessionFactory 可以理解为是创建 SqlSession 的工厂,SqlSessionFactory 是线程安全的,一旦被创建,应该在应用执行期间都存在。在应用运行期间不要重复创建多次,建议使用单例模式。
SqlSession 的作用类似于一个 JDBC 中的 Connection 对象,代表着一个连接资源的启用。参考自MyBatis SqlSession简介
具体而言,SqlSession 的作用有 3 个:
- 获取 Mapper 接口。
- 发送 SQL 给数据库。
- 控制数据库事务。
SqlSession 是应用程序与持久存储层之间执行交互操作的一个单线程对象,也是 Mybatis 执行持久化操作的关键对象。SqlSession 对象完全包含以数据库为背景的所有执行 SQL 操作的方法,它的底层封装了 JDBC 连接,可以用 SqlSession 实例来直接执行已映射的 SQL 语句。每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不能被共享,也是线程不安全的,绝对不能将 SqlSession 实例的引用放在一个类的静态字段甚至是实力字段中。也绝不能将 SqlSession 市里的引用放在任何类型的管理范围中,比如 Servlet 当中的 HttpSession 对象中。使用 SqlSession 之后关闭 Session 很重要,应该确保使用 finally 块来关闭它。