一级缓存:在mybatis没有做配置的情况下,默认使用一级缓存。
如果SqlSession没有执行一次查询后,没有关闭,刷新,超时等情况下
条件相同再次查询,就直接使用缓存信息而不需要再去数据库执行sql语句。
生命周期:
1、进行一次有效查询,产生一个PerpetualCache
2、如果调用close方法,就会释放一级缓存对象PerpetualCache
3、如果调用clearCache,就会清空PerpetualCache对象中数据,但对象SQLSession可用
4、如果执行了任何一个update(insert,update,delete),都会都会清空PerpetualCache
原理:
1、Exercise.java:
package com.exercise;
import com.config.MybatisConfig;
import com.entity.TStudent;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class Exercise {
@Test
public void exercise01(){
SqlSession ss = MybatisConfig.getSqlSession();
String statement = "cache.findStudent";
TStudent ts = ss.selectOne(statement,76);
System.out.println(ts);
try {
Thread.sleep(2000);
}catch (Exception e){
//e.printStackTrace();
System.out.println("线程睡眠出错!");
}
//ss.close();//关闭
ts = ss.selectOne(statement,76);
System.out.println(ts);
}
}
2、CacheMapper.xml:
<?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">
<mapper namespace="cache">
<select id="findStudent" resultType="com.entity.TStudent" parameterType="int">
select * from t_student t where id = #{id}
</select>
</mapper>