M1、Mybatis的一级缓存和二级缓存有什么区别,怎么开启?
(1)区别
- 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的SqlSession之间的缓存数据区域(HashMap)是互不影响的。
- MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。
- Mybatis中,一级缓存默认是开启的。而二级缓存需要手动开启。
(2)开启
默认开启,无需特殊处理
在yml中添加以下代码:
mybatis:
configuration:
cache-enabled: true
在需要开启的mapper.xml中,添加以下代码(在下方)
<!-- 开启本mapper所在namespace的二级缓存 -->
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
M2、#{} 和 ${} 的区别是什么?
两者在 MyBatis 中都可以作为 SQL 的参数占位符,在处理方式上不同
- #{}:在解析 SQL 的时候会将其替换成 ? 占位符,然后通过 JDBC 的 PreparedStatement 对象添加参数值,这里会进行预编译处理,可以有效地防止 SQL 注入,提高系统的安全性
- ${}:在 MyBatis 中带有该占位符的 SQL 片段会被解析成动态 SQL 语句,根据入参直接替换掉这个值,然后执行数据库相关操作,存在 SQL注入 的安全性问题
M3、MyBatis的动态标签有哪些?
1.if
2.choose、when、otherwise
3.where
4.set
5.trim
6.foreach
7.bind