一级缓存的细节
① 什么操作会向一级缓存放入数据
save,update,saveOrUpdate,load,get,list,iterate,lock
save 案例:
//添加一个学生
Studentstudent=new Student();
student.setName("小东");
s.save(student);//放入一级缓存
//我马上查询
Studentstu2=(Student) s.get(Student.class, student.getId()); //select
System.out.println("你刚刚加入的学生名字是"+stu2.getName());
② 什么操作会从一级缓存取数据.
get / load / list
get / load 会首先从一级缓存中取,如没有.再有不同的操作[get 会立即向数据库发请求,而load 会返回一个代理对象,直到用户真的去使用数据,才会向数据库发请求]
?list 会不会从session缓存取数据?
案例:
//查询45号学生
Studentstu=(Student) s.get(Student.class, 45);
System.out.println("|||||||||||||||||||");
Stringhql="from Student where id=45";
Studentstu2=(Student) s.createQuery(hql).uniqueResult();
System.out.println(stu2.getName());
从上面的案例,我看出query.list() query.uniueResut() 不会从一级缓取数据! 但是query.list 或者query.uniqueRestu() 会向一级缓存放数据的.
③ 一级缓存不需要配置,就可以使用,它本身没有保护机制,所以我们程序员要考虑这个问题,我们可以同 evict 或者 clear来清除session缓存中对象. evict 是清除一个对象,clear是清除所有的sesion缓存对象
④ session级缓存中对象的生命周期, 当session关闭后,就自动销毁.