- 缓存的底层实现是一个Map, Map的value是查询结果
- Map的key,即查询依据,即使用的ORM框架不同,查询依据是不同的
- MyBatics的查询依据是:sql的id+sql语句
- Hibernate的查询依据是:查询结果对象的id
- 证明从一级缓存中读取数据的依据,执行不同的方法(但sql语句相同)
- 增删改都会清空一级缓存,无论是否提交
xml:
<mapper namespace="org.lfz.dao.IStudentDao">
<select id="selectStudentById" resultType="Student">
select id,name,age,score from tb_student where id=#{xxx}
</select>
<select id="selectStudentById2" resultType="Student">
select id,name,age,score from tb_student where id=#{xxx}
</select>
</mapper>
JUnitTest:
public class MyTest {
private IStudentDao dao;
@Before
public void before() {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
dao = sqlSession.getMapper(IStudentDao.class);
}
/*证明一级缓存的存在*/
@Test
public void testSelectStudentById() {
Student stu = dao.selectStudentById(2);
System.out.println(stu);
Student stu1 = dao.selectStudentById(2);
System.out.println(stu1);
}
/*缓存的底层实现是一个Map,Map的value是查询结果*/
/*Map的key,即查询依据,即使用的ORM框架不同,查询依据是不同的*/
/*MyBatics的查询依据是:sql的id+sql语句*/
/*Hibernate的查询依据是:查询结果对象的id*/
/*证明从一级缓存中读取数据的依据,执行不同的方法(但sql语句相同)*/
@Test
public void testSelectStudentById2() {
Student stu = dao.selectStudentById(2);
System.out.println(stu);
Student stu1 = dao.selectStudentById2(2);
System.out.println(stu1);
}
/*增删改都会清空一级缓存,无论是否提交*/
@Test
public void test03() {
Student stu = dao.selectStudentById(2);
System.out.println(stu);
//增删改都会清空一级缓存
dao.insertStudent(new Student("小明",23,95.5));
Student stu1 = dao.selectStudentById(2);
System.out.println(stu1);
}
}