Mybatis 详情

工具

记录一下

生命周期

①SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 是利用 XML 或者 Java 编码获得资源来构建 SqlSessionFactory 的,通过它可以构建多个 SessionFactory。它的作用就是一个构建器,一旦我们构建了 SqlSessionFactory,它的作用就已经完结,失去了存在的意义,这时我们就应该毫不犹豫的废弃它,将它回收。所以它的生命周期只存在于方法的局部,它的作用就是生成 SqlSessionFactory 对象。

②SqlSessionFactory

SqlSessionFactory 的作用是创建 SqlSession,而 SqlSession 就是一个会话,相当于 JDBC 中的 Connection 对象。每次应用程序需要访问数据库,我们就要通过 SqlSessionFactory 创建 SqlSession, 所以 SqlSessionFactory 应该在 MyBatis 应用的整个生命周期中。而如果我们多次创建同一个数据库的 SqlSessionFactory, 则每次创建 SqlSessionFactory 会打开更多的数据库连接(Connection)资源,那么连接资源就很快会被耗尽。因此 SqlSessionFactory 的责任是唯一的,它的责任就是创建 SqlSession, 所以我们果断采用单例模式确保每一个数据库只对应一个 SqlSessionFactory,管理好数据库资源的分配,避免过多的 Connection 被消耗。

③SqlSession

是一个会话,相当于 JDBC 的一个 Connection 对象,它的生命周期应该是在请求数据库处理事务的过程中。在涉及多线程的时候我们需特别的当心,因为它是一个不安全的对象,操作数据库需要注意其隔离级别,数据库锁等高级特性。每次创建的 SqlSession 都必须及时关闭它,它长期存在会使数据库连接池的活动资源减少,对系统性能的影响很大。

④Mapper

Mapper 是一个接口,而没有任何实现类,它的作用是发送 SQL,然后返回我们需要的结果,或者执行 SQL 从而修改数据库的数据,因此它应该在一个 SqlSession 事务方法之内,是一个方法级别的东西。

⑤MyBatis 组件的生命周期

mybatis.png 生命周期

配置文件

mybatis: config-location: classpath:mybatis-config.xml # mybatis 配置文件 tyape-aliases-packge: com.iswn.pojo # 所有POJO类所在包路径 mapper-locations: classpath*:mapper/*.xml # mapper映射文件

扩展阅读

MyBatis-Spring MyBatis-Spring官方文档 学习笔记