明:如果一个数据一直在改变,不适合用缓存。
二级缓存的生命周期和sessionFactory是一致的。
位置
利用的是ehcache实现的二级缓存
1、在hibernate的配置文件中
2、指定哪个类开启二级缓存
哪些方法可以把对象放入到二级缓存
get方法,list方法可以把一个或者一些对象放入到二级缓存中哪些方法可以把对象从二级缓存中提取出来 get方法, iterator方法可以提取1、在hibernate的配置文件中,开启查询缓存
2、使用查询缓存 查看QueryCacheTest的例子
hibernate总共有三种缓存
一级缓存 一级缓存解决的问题是在一次请求中,尽量减少和数据库交互的次数,在session.flush之前,改变的是一级缓存的对象的属性。当session.flush的时候才要 跟数据库交互,一级缓存解决不了重复查询的问题。一级缓存是对象缓存
二级缓存 二级缓存可以把经常不改变、常用的公共的数据放入进来,可以重复查询,利用get方法和iterator方法可以把二级缓存中的数据得到。
查询缓存 查询缓存可以缓存数据或者对象,可以利用list方法把查询缓存中的数据放入到缓存中,查询缓存中存放的是数据,是数据缓存。
创建session的方式 sessionFactory.openSession
每次都要创建一个新的session,相当于一个新的连接
sessionFactory.getCurrentSession
在hibernate.cfg.xml文件中
如果用该方法产生session,则crud操作必须在事务的环境下运行 当执行transaction.commit的方法的时候,session自动关闭。
说明: 这么做相当于把session与transaction绑定在一起了。 当事务提交的时候,session关闭不好,因为如果事务提交以后,再做关于数据库 的操作,就不能做了。
一对多的单项 inverse与cascade的关系 cascade指的是级联操作,操作的是一般属性,指的是对象与对象的操作 inverse指的是关系操作,针对的就是外键
一对多的双向 当多的一方维护关系时,不会发出更新关系的update语句,而一的一方维护关系时 需要发出维护关系的update语句,所以在这里,一般情况下,多的一方维护关系效率 比较高。
多对多 维护关系 多对多建立关系相当于在第三张表中插入一行数据 多对多解除关系相当于在第三张表中删除一行数据 多对多修改关系相当于先删除后增加 多对多谁维护效率都一样。看需求
查询缓存
二级缓存的位置