MyBatis的查询依据是:Sql的id+SQL语句。
Hibernate的查依据是:查询结果对象的id。
缓存的底层实现是一个Map,Map的value是查询结果。Map的key,即查询依据,使用的ORM架构不同,查询依据就不不同。
/*缓存的底层实现是一个Map,Map的value是查询结果*/
/*Map的key,即查询依据,即使用的ORM框架不同,查询依据是不同的*/
/*MyBatics的查询依据是:sql的id+sql语句*/
/*Hibernate的查询依据是:查询结果对象的id*/
/*证明从一级缓存中读取数据的依据,执行不同的方法(但sql语句相同)*/
/*增删改都会清空一级缓存,无论是否提交*/
<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>
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);
}
}