MyBatis 中 #{}和 ${}的区别是什么?
#{}
是预编译处理,会将#{}替换成?号,调用PreparedStatement的set方法来赋值,可以有效的防止SQL注入,提高系统安全性。${}
是字符串替换,会把sql中的${}替换成变量的值,一般用于传入数据库对象,比如表名。- 能用#的情况下就不要使用$。
MyBatis 有几种分页方式?
- SQL分页、MyBatis分页插件Pagehelper、MyBatis-Push分页、RowBounds分页。
RowBounds 是一次性查询全部结果吗?
MyBatis 逻辑分页和物理分页的区别是什么?
- 逻辑分页:逻辑分页利用游标分页,好处是所有数据库都统一,坏处就是效率低。
- 物理分页:物理分页就是数据库本身提供了分页方式,如MySQL的limit,oracle的rownum ,好处是效率高,不好的地方就是不同数据库有不同的搞法。
MyBatis 是否支持延迟加载?延迟加载的原理是什么?
- mybatis支持延迟加载
- 适用场景
一对一,多对一 立即加载
一对多,多对多 延迟加载
说一下 MyBatis 的一级缓存和二级缓存?
- 一级缓存:也叫sqlSession级别的缓存 ,也就是在同一个sqlSession内执行两次多次相同结果的查询语句,只会在第一次时发 出sql查询数据库的数据,然后之后每次从一级缓存中查询数据返回。
- 二级缓存:是mapper级别的缓存,也就是多个sqlSession之间可以实现数据的共享。二级缓存默认是不开启,所以在使用二级缓存时需要自行配置:
在mybatis-config.xml文件中开启二级缓存:<setting name="cacheEnalbled" value="true">
在mapper.xml文件中开启二级缓存:<cache/>
SpringBoot+Mybatis如何在控制台打印sql语句?
- properties:logging.level.×××.mapper=debug
- yml:logging:
- level:
- ×××:
- mapper: debug
- ##其中×××为你的mapper路径包