zoukankan      html  css  js  c++  java
  • 初学hibernate之缓存

    一、1、Session级别缓存属于一级缓存,持久化对象保存在Session一级缓存中(一级缓存引用持久化对象地址),只要session不关闭,一级缓存就存在,缓存中对象也不会被回收;

    Session会在一些特定时间点,将缓存中数据flush到数据库中( Transaction的commit()、应用程序执行一些查询操作、调用session的flush方法)。

    2、SessionFactory级别缓存属于二级缓存

    二、证明一级缓存存在:在获取Customer的Demo中,可以使用同一个Session获取两次Customer,如:

    Customer c1=session.get(Customer.class,1);//这时c1是持久化状态,c1存储在session中(一级缓存);

    System.out.println(c1.getName());

    Customer c2=session.get(Customer.class,1);//可验证c2获取值时并未向数据库发送SQL语句,而且c1值和c2值相同

    System.out.println(c2.getName());

    三、hibernate快照

    Hibernate快照可以让持久化对象具有自动更新能力。

    如在执行customer查询操作时Customer c1=session.get(Customer.class,1);如果取到的c1对象Name为”tom“,然后c1.setName("fox");然后提交事务并关闭session。数据库查询customer数据,id为1的记录name值更改为fox。这是快照让对象有了自动更新能力。

    Hibernate向一级缓存放入数据时,同事保存快照数据(数据备份),当修改一级缓存数据,在flush操作时,对比缓存和快照,如果不一致自动更新(将缓存数据同步到数据库,并更新快照)

    四、一级缓存常见操作:

    1、flush,用于刷新一级缓存,使快照区数据和缓存数据一致,在没有提交数据库执行前,数据库数据没有改变

    2、clear,清空一级缓存中所有对象

    3、evict,清空一级缓存中指定对象

    4、refresh,使用数据库数据同步一级缓存与快照(重新查数据库,更新快照和一级缓存)

  • 相关阅读:
    ThinkPHP第八天(U函数放置在外部JS不会被解析,错误界面定制,错误信息变量)
    ThinkPHP第七天(F函数使用,项目分组配置,项目分组模板文件放置规则配置)
    thinkphp第二天
    ThinkPHP第五天(提交类型判定常量IS_POST等,错误页面种类,Model实例化方式,模板中使用函数,foreach循环,模板中.语法配置)
    高阶函数、函数嵌套和闭包
    递 归
    函数式编程
    命名空间
    函数的参数
    循环语句
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/4734766.html
Copyright © 2011-2022 走看看