day34

    xiaoxiao2021-04-15  63

    二级缓存

    实用的场合

    公开的数据 数据基本上不发生变化 该数据保密性不是很强 说

    明:如果一个数据一直在改变,不适合用缓存。

    生命周期

    二级缓存的生命周期和sessionFactory是一致的。

    位置

    设置二级缓存

    利用的是ehcache实现的二级缓存

    1、在hibernate的配置文件中

    2、指定哪个类开启二级缓存

    操作

    哪些方法可以把对象放入到二级缓存

    get方法,list方法可以把一个或者一些对象放入到二级缓存中哪些方法可以把对象从二级缓存中提取出来 get方法, iterator方法可以提取

    策略

    read-only:对象只要加载到二级缓存以后,就只能读取了,不能进行修改。 read-write:对二级缓存中的对象能够进行读和写的操作

    查询缓存

    一级缓存和二级缓存都是对象缓存:就是把该对象对应的数据库表中的所有的字段 全部查询出来了,这种查询在某些场合下会让效率降低。例如:表中的字段特别多, 但是程序中所需要的字段却很少。 查询缓存也叫数据缓存:内存(页面)中需要多少数据就把多少数据放入到查询缓存 中。

    生命周期

    只要一些数据放入到查询缓存中,该缓存会一直存在,直到缓存中的数据被修改了,该 缓存的生命周期就结束了。

    操作步骤

    1、在hibernate的配置文件中,开启查询缓存

    2、使用查询缓存 查看QueryCacheTest的例子

    总结

    hibernate总共有三种缓存

    一级缓存 一级缓存解决的问题是在一次请求中,尽量减少和数据库交互的次数,在session.flush之前,改变的是一级缓存的对象的属性。当session.flush的时候才要 跟数据库交互,一级缓存解决不了重复查询的问题。一级缓存是对象缓存

    二级缓存 二级缓存可以把经常不改变、常用的公共的数据放入进来,可以重复查询,利用get方法和iterator方法可以把二级缓存中的数据得到。

    查询缓存 查询缓存可以缓存数据或者对象,可以利用list方法把查询缓存中的数据放入到缓存中,查询缓存中存放的是数据,是数据缓存。

    session

    创建session的方式 sessionFactory.openSession

    每次都要创建一个新的session,相当于一个新的连接

    sessionFactory.getCurrentSession

    在hibernate.cfg.xml文件中

    如果用该方法产生session,则crud操作必须在事务的环境下运行 当执行transaction.commit的方法的时候,session自动关闭。

    说明: 这么做相当于把session与transaction绑定在一起了。 当事务提交的时候,session关闭不好,因为如果事务提交以后,再做关于数据库 的操作,就不能做了。

    关系操作

    一对多的单项 inverse与cascade的关系 cascade指的是级联操作,操作的是一般属性,指的是对象与对象的操作 inverse指的是关系操作,针对的就是外键

    一对多的双向 当多的一方维护关系时,不会发出更新关系的update语句,而一的一方维护关系时 需要发出维护关系的update语句,所以在这里,一般情况下,多的一方维护关系效率 比较高。

    多对多 维护关系 多对多建立关系相当于在第三张表中插入一行数据 多对多解除关系相当于在第三张表中删除一行数据 多对多修改关系相当于先删除后增加 多对多谁维护效率都一样。看需求

    查询缓存

    二级缓存的位置

    转载请注明原文地址: https://ju.6miu.com/read-670824.html

    最新回复(0)