Mybatis 缓存


一级缓存
范围在一次sqlsession中
如果执行了sqlSession.close();,缓存就消失了。
二级缓存



步骤

<!--显示的开启-->
<setting name="cacheEnabled" value="true"/>
类中实现序列化接口
package pojo;
import lombok.Data;
import java.io.Serializable;
@Data
public class User implements Serializable {
private int id;
private String name;
private String pwd;
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace对应接口名字-->
<mapper namespace="dao.BlogMapper">
<!--开启二级缓存-->
<cache/>
<!--设置useCache属性-->
<select id="queryUserByid" parameterType="int" resultType="user" useCache="true">
select * from user where id=#{id}
</select>
</mapper>
主程序
import dao.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utiles.MybatisUtiles;
public class Mytest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtiles.getSqlSession();
SqlSession sqlSession1=MybatisUtiles.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
UserMapper mapper1=sqlSession1.getMapper(UserMapper.class);
User user = mapper.queryUserByid(1);
System.out.println(user);
sqlSession.close();
//此时一次sqlSession执行完毕 二级缓存已经存在 用不同的sqlSession去执行语句也会使用缓存
User user1=mapper1.queryUserByid(1);
System.out.println(user);
sqlSession1.close();
}
}

红箭头位置为第一次查询,蓝箭头为第二次查询可以看到去直接使用缓存
缓存顺序
先二后一 都没有就执行Sql语句

浙公网安备 33010602011771号