Mybatis 基础知识

Mybatis 基础执行流程:

          1. 加载Mybatis 环境信息,如 数据库信息、Mapper 映射文件、数据库驱动等信息

          2. 创建 SqlSessionFactory Sql 会话工厂对象,该对象全局只有一个

          3. 使用Sql 会话工厂对象创建 Sql 会话 (SqlSession) ,每次数据操作都会创建一个新的会话

          4. Executor 根据 SqlSession 传递的参数动态生成要执行 sql 以及维护缓存数据

          5. MappedStatement 将 Java 类型的参数类型解析成数据库对应的数据类型,并将数据库返回数据解析成Java语言对应的数据类型

Mybatis 一二级缓存:

          mybatis 一级缓存是 Sqlsession 会话缓存,默认开启,如果一个会话中相同的 sql 执行多次且没有做过数据增删改,只有第一次会去数据库中查询数据,后续几次直接获取本地缓存数据,做过数据增删改本地缓存会被清空

         mybatis 二级缓存是 namespace 命名空间缓存,需要手动开启在配置文件中添加 Cache Enable 信息并且在 Mapper 文件中添加缓存标签<Cache /> 才会开启,二级缓存也是本地缓存,如果在同一个 namespace 命名空间先执行相同的 sql 语句,第一次会去数据库中查询数据,后续几次直接获取本地缓存数据,但是在同一个 namespace 命名空间下做过一次 增删改操作,会清空当前命名空间下的所有缓存信息

        注意:使用二级缓存需要实体类实现序列化接口,因为 mybatis 使用序列化的的方式缓存数据,在获取缓存数据是只需要反序列化出一个新对象 ,mybatis 会先查二级缓存在查一级缓存

Mybatis 一个 SQL 语句的执行流程:

         使用 Mybatis 获取一个sql 语句的结果:

           1. 先使用SqlSessionFactory 创建一个 SqlSession 会话,SqlSession 会话中创建 事务对象 和 执行器对象(Executor),执行器默认使用简单执行器(SimpleExecutor)对象,如果开启二级缓存,将简单执行器对象包装为缓存执行器(CachingExecutor),

           2. 在 SqlSession 调用具体的 sql 语句对应的方法时, 根据方法名称和接口类型去 Configuration 环境信息,获取 MappedStatement 信息包含 sql 语句、参数类型、返回类型等信息,把获取到的MappedStatement 信息传入Executor 执行器中

           3. 执行器会根据 MappedStatement 信息 与 sql 参数信息创建缓存key,如果当前执行器是缓存执行器(CachingExecutor),会先使用 key 去二级缓存中获取数据,二级缓存没有数据再去一级缓存中获取数据,一级缓存没有数据才执行 sql 语句在数据库中获取数据

           4. 获取数据前MappedStatement  中的 sql 信息,由 PreparedStatement 对象做 sql 语句预处理然后执行拿到数据库数据

           5. 返回结果由 ResultSetHandler 结果集处理对象转化为 java 对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值