hibernate有一级和二级缓存机制,一般使用session了就自动启动了一级缓存机制,把第一次查询的结果都存放进了内存里面,所以后面查询就可以直接的从内存里面读取,减少访问物理数据源的频次,提高性能,除非使用evict、clear清楚了session的缓存,大部分情况这个缓存都有利于我们更快的查询,但是不排除会影响程序性能的可能。
evict清空Session中的一级缓存
clear清空一级缓存中的容器的数据
一级缓存 Session缓存 会话级缓存
一级缓存的生命周期和Session相同 Session销毁一级缓存也就会销毁
query.list()和query.iterate()区别
1.返回的类型不同:
list()返回List;iterate()返回Iterate。
2.查询策略不同:
list()直接发送sql语句,查询数据库;
iterate()发送sql语句,从数据库取出id,然后先从缓存中根据id查找对应信息,
有就返回结果,没有就根据id发送sql语句,查询数据库。
3.返回对象不同:
list()返回持久化实体类对象;
iterate()返回代理对象。
4.与缓存的关系不同:
list()只缓存,但不使用缓存(查询缓存除外);
iterate()不会缓存进去内存,但会使用缓存。