Skip to content

mybatis基本介绍

一、mybatis的基本组件

mybatis的组成包括configuration、sql映射、mapper、mapperStatments。mybatis的配置,启动的时候需要加载的配置信息,包括mapper映射sql, 数据源,对象工厂objectFactory。以及一些参数配置,如是否懒加载、是否开启缓存等等。

1.1 插入主键自增的id

需要增加option注释开启主键自增,keyProperty是java对象属性,keyColumn是数据库字段属性

@Options(useGeneratedKeys = true ,keyProperty = "userId" ,keyColumn = "USER_ID")

二、mybatis的生命周期

了解SqlSessionFactoryBuider、SqlSessionFactory、SqlSession、mapper的生命周期。

三、SqlSessionFactoryBuider

SqlSessionFactoryBuider通过XML或者java获得资源创建SqlSessionFactory的,通过SqlSessionFactoryBuider可以创建多个SqlSessionFactory工厂类。 它的作用类似构造器,一旦创建完SqlSessionFactory,他的作用就已经完结。这时候我们应该毫不犹豫的回收它的资源。所以他的生命周期仅限于局部的方法,生成SqlSessionFactory对象

四、SqlSessionFactory

SqlSessionFactory是一个工厂类,作用是创建SqlSession,而SqlSession是一个会话,类似jdbc的connection对象,每当应用需要访问数据库的时候, 我们就通过SqlSessionFactory创建SqlSession。所以SqlSessionFactory是应该在mybatis的整个生命周期当中。SqlSessionFactory应当是单例模式, 如果有多个SqlSessionFactory的实例存在,则每次创建SqlSessionFactory会打开更多的数据库连接,那么连接资源就会被消耗殆尽。这样使得每一个数据库都只有一个SqlSessionFactory, 管理好数据库的资源分配,避免过多的connection被消耗。

五、SqlSession

SqlSession是一个会话,相当于jdbc的connection对象,他的生命周期为请求数据库处理事务的过程。它是一个线程不安全对象,在涉及多线程的时候要当心,操作数据库注意隔离级别、数据库锁等高级特性。 每次创建SqlSession都必须关闭它,否则会一直占用和消耗资源。往往我们都用finally语句块保证关闭了SqlSession对象。它可以执行多条sql,保证事务的一致性。

六、Mapper

Mapper是一个接口,而没有任何实现类,它的主要作用是发送sql,然后返回我们所需要的结果,或者执行sql从而修改数据库的数据。因此他应该是在SqlSession的方法之内, 是一个方法级别的东西。它就如同jdbc的一条sql执行语句,它的最大范围(生命周期)与SqlSession相同。

七、系统缓存(一级缓存和二级缓存)

mybatis提供了缓存的支持,默认的配置是开启一级缓存,一级缓存只是对于一个SqlSession而言。即不同的SqlSession缓存的内容都是不一样的,因为不同的SqlSession之间是相互隔离的。

二级缓存是SqlSessionFactory层面上提供给各个SqlSession对象共享,默认是不开启的,需要配置开启。实现二级缓存的时候要求POJO类是可序列的(实现Serializable接口),