面试总结
1. mybatis中如何开启二级缓存?
答:第一步、 在配置文件mybatis-config.xml文件中加入<setting name="cacheEnabled" value="true"></setting>.
注意是加在<configuration><settings><settings></configuration>中。
第二步: 在对应的mapper文件中加入<cache><cache> 这个文件中的所有查询就都开启的二级缓存了。
开启缓存后,第一次查询会执行sql,第二次及以后的查询都会从缓存中读取数据
在查询语句中禁用二级缓存,useCache="false", 如:
<select id="queryUser" parameterType="HashMap" resultType="com.ly.model.User" useCache="false"> ...</select>
刷新缓存 flushCache="true", 当更新数据的时间可以进行刷新缓存操作,如:insert、 update、delete
<insert id="insertUser" parameteType="com.ly.model.User" flushCache="true"></insert>
要使用二级缓存,对应的model必须要实现序列化, implements Serializable
当select 语句 flushCache="false" 表示所有的操作都需要进行缓存,都不会去清空缓存和二级缓存
useCache="true", 表示这条语句将进入二级缓存
当是 insert、update、delete操作的时候,
flushCache="true" 表示每个操作都要清空一级缓存和二级缓存
这些操作中没有参数useCache
在默认情况下,select语句是开启了缓存的,并且是不刷新缓存的,即: useCache="true", flushCache="false"
Mybatis的一级缓存是指SqlSession。一级缓存的作用域是一个SqlSession。Mybatis默认开启一级缓存。
在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则SqlSession的缓存清空。
Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。
在同一个namespace下的mapper文件中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则二级缓存清空。
mybatis默认没有开启二级缓存,所以要使用的话就需要手动开启二级缓存
一级缓存:
二级缓存: