Hibernate缓存

1.Hibernate一级缓存

Hibernate的一级缓存就是指session缓存。
private transient ActionQueue actionQueue;
private transient StatefulPersistenceContext persistenceContext;
actionQueue:它是一个行列队列,它主要是记录crud操作的相关信息。
persistenceContext : 它是我们持久化上下文,它其实是真正的缓存。

在session中定义了一系列的集合来存储数据,他们构成session缓存。
只要session没有关闭,他就会一直存在。
当我们通过Hibernate中的session提供一些API例如save get update等进行操作时。会将持久化对象保存到session中,当下一次在去查询缓存中具有的对象,通过OID来判断。
就不会去从 数据库查询,而是直接从缓存中获取。
Hibernate的一级缓存存在的目的就是为了减少对数据库的访问。

在Hibernate中还有一个二级缓存,它是sessionFactory级别的缓存。

2.Hibernate缓存测试

//  测试一级缓存

    @Test
    public void test11(){
        Session session = hibernateUtils.openSession();
        session.beginTransaction();

        Csutomer csutomer = session.get(Csutomer.class, 1);//查询id=1的Csutomer对象,如果查询到,会将Csutomer存储到一级缓存中。
        Csutomer csutomer2 = session.get(Csutomer.class, 1);//会从一级缓存中查询,而不会向数据库发送sql。


        session.getTransaction().commit();
        session.close();


    }


>3.持久化对象具有自动更新数据库能力

// 持久化对象具有自动更新数据库能力

@Test
public void test12(){
    Session session = hibernateUtils.openSession();
    session.beginTransaction();

    Csutomer csutomer = session.get(Csutomer.class, 1);//查询id=1的Csutomer对象,如果查询到,会将Csutomer存储到一级缓存中。
    csutomer.setName("hans");//操作持久化对象来修改属性。这句话执行时修改一级缓存的数据。

// 事务提交关闭:session关闭,向数据库发送请求时,会判断 一级缓存中的数据是否与快照区一致,如果不一样,就会发送Update语句。
session.getTransaction().commit();
session.close();

}

>4.一级缓存常用的API

–一级缓存特点:
1.当我们通过session的save.update.saveOrUpdate进行操作时,如果一级缓存中没有对象,会将这些对象从数据库中查询到,存储到一级缓存。
2.当我们通过session的load.get.Query的List等方法进行操作时,会先判断一级缓存中是否存在,如果没有才会从数据库中获取,并且将数据存储到一级缓存中。
3.当调用session的close方法时,session缓存清空。

“`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值