浅谈Hibernate中的缓存

举报
运气男孩 发表于 2022/04/21 17:31:07 2022/04/21
【摘要】 前言上篇博客浅谈了一下Hibernate实体类对象有3种状态,瞬时态、托管态、持久态。--------浅谈Hibernate中对象的状态接着这篇博客来说说hibernate中的缓存机制是如何的Hibernate框架提供了很多的优化策略,缓存就属于其中的一种优化策略,hibernate中支持一级缓 存和二级缓存 在hibernate中,一级缓存默认是开启的,一级缓存的作用范围为会话级别(ses...

前言

上篇博客浅谈了一下Hibernate实体类对象有3种状态,瞬时态、托管态、持久态。--------浅谈Hibernate中对象的状态

接着这篇博客来说说hibernate中的缓存机制是如何的

Hibernate框架提供了很多的优化策略,缓存就属于其中的一种优化策略hibernate中支持一级缓 二级缓存
  • hibernate中,一级缓存默认是开启的,一级缓存的作用范围为会话级别session范围级别), 缓存中存储的数据为持久态对象数据
  • hibernate中,支持二级缓存策略,可以通过配置文件手动开启二级缓存,但是目前hibernate级缓存不再使用,而是被redis替代,二级缓存的作用范围为会话工厂级别(SessionFactory范围级别)

1.验证Hibernate的一级缓存是否开启

 /**
     * 验证一级缓存是否开启
     */
    @Test
    public  void testCache(){

        SessionFactory sessionFactory =HibernateUtils.getSessionFactory();

        Session session =sessionFactory.openSession();

        User user1 =session.get(User.class,2);
        System.out.println(user1);

        User user2 =session.get(User.class,2);
        System.out.println(user2);

        session.close();
        sessionFactory.close();
    }

测试结果如下,可以看出能查询到两个用户,tb_user表如果数据库里没有  hibernate底层会自动帮我们生成

缓存原理:

当我们第一次查询数据的时候,先去缓存中查找,如果缓存中没有,则再去数据库中查找, 从数据库中查询到结果后,将结果返回给缓存,再将缓存中的查询结果返回给用户,如果缓存中有要查找的数据,则不需要再去查询数据库,直接从缓存中返回要查找的数据。当我们下一次查询同样的数据时,直接从缓存中拿。

2、缓存的功能

hibernate缓存有一个功能,就是修改完持久态数据后,不需要调用session对象的update方法或 saveOrUpdate方法修改数据库表,而是自动保存修改后的持久态数据。

/**
 * hibernate缓存功能:·自动保存修改后的持久层对象数据     
 */
@Test
public void testCacheCharacter() {
    SessionFactory sessionFactory =HibernateUtils.getSessionFactory();
    Session session =sessionFactory.openSession();

    Transaction transaction = session.beginTransaction();

    User user =session.get(User.class,2);

    user.setUsername("运气男孩");

    transaction.commit();

    session.close();
    sessionFactory.close();
}

直接运行测试,结果如下

这里看到运行成功,说明数据库已经被修改,直接去数据库查看一下是否修改成功

总结

本篇主要说了一下hibernate的缓存原理和缓存的功能,并用一个小例子简单演示。

感恩能与大家在华为云遇见!希望能与大家一起在华为云社区共同成长。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。