文章目录
- 1. Mybatis缓存机制
- 2. 动态SQL语句
- 3. 分页
- 3. 1 几种分页方式
- 3.2 MyBatis 是如何进行分页的?分页插件的原理是什么?
- 3.3 逻辑分页和物理分页
1. Mybatis缓存机制
作用:避免每次都去查db
一级缓存是SqlSession级别的缓存,也叫本地缓存。
跨SqlSession级别的,引入了二级缓存(全局缓存)。
先通过CachingExecutor查二级缓存
2. 动态SQL语句
- MyBatis 动态 SQL 可以让我们在 XML 映射文件内,以标签的形式编写动态 SQL,完成逻辑判断和动态拼接 SQL 的功能;
- MyBatis 提供了 9 种动态 SQL标签:trim、where、set、foreach、if、choose、when、otherwise、bind;
- 执行原理:使用 OGNL 从 SQL 参数对象中计算表达式的值,根据表达式的值动态拼接 SQL,以此来完成动态 SQL 的功能。
3. 分页
3. 1 几种分页方式
数组分页
SQL 分页
拦截器分页
RowBounds 分页
3.2 MyBatis 是如何进行分页的?分页插件的原理是什么?
MyBatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。可以在 SQL 内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
分页插件的基本原理是使用 MyBatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL,根据 dialect 方言,添加对应的物理分页语句和物理分页参数
3.3 逻辑分页和物理分页
- 物理分页
物理分页就是数据库本身提供了分页方式,如MySQL的limit,oracle的rownum ,好处是效率高,不好的地方就是不同数据库有不同的搞法。 - 逻辑分页
逻辑分页利用游标分页,好处是所有数据库都统一,坏处就是效率低。
逻辑分页是一次性查询很多数据,然后再在结果中检索分页的数据。这样做弊端是需要消耗大量的内存、有内存溢出的风险、对数据库压力较大。 物理分页是从数据库查询指定条数的数据,弥补了一次性全部查出的所有数据的种种缺点,比如需要大量的内存,对数据库查询压力较大等问题。