浅谈Hibernate中的缓存
【摘要】 前言上篇博客浅谈了一下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)