`

ORM中的缓存分类

阅读更多
orm中的缓存分为3种

第一种:事务级缓存:当前事务范围内在的数据缓存,session的生命周期也就是事务级缓存的生命周期 Session Level Cache(一级缓存)

Hibernate进行查询时总是先在缓存中进行查询,如缓存 中没有所需数据才进行数据库的查询.Hibernate的内部缓存是基于Session的生命周期的,也就是说存在于每个Session内部,它随着 Session的创建而存在,随着Session的销毁而灭亡,内部缓存一般由Hibernate自动维护,不需要人为干预,当然我们也可以根据需要进行 相应操作:Session.evict(Object)(将指定对象从内部缓存清除),Session.clear()(清空内部缓存).(如在两次查询 间加入Session.clear()将会清空内部缓存,使得一个Sesion内部的两次相同的查询要对数据库进行两次操作).

第二种:应用级缓存:某个应用中的共享缓存,由sessionFactory的来控制,也就是说由一个sessionFactory创建的session实例共享此缓存 SessionFactory Level Cache(二级缓存)
2.二级缓存:(有时称为SessionFactory Level Cache)
  Hibernate本身并未提供二级缓存的产品化实现(只提供了一个基于HashTable的简单缓存以供调试),这里我使用的是第三方缓存组件:EHcache.Hibernate的二级缓存实现需要进行以下配置(Hibernate3):
首先在hibernate.cfg.xml内添加:
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>  
<property name="hibernate.cache.use_query_cache">true</property>  

然后在映射文件中添加:
<cache usage="read-only"/>  

             测 试上面代码:控制台输出多了这样一句[ WARN] (CacheFactory.java:43) - read-only cache configured for mutable class: hibernate.TUser,二级缓存启用成功!!      

java 代码
public class Test {   
    
       public void executeQuery(){   
     
             List list = new ArrayList();   
             Session session = HibernateSessionFactory.getSession();   
             Query query = session.createQuery("from TUser t");   
             query.setCacheable(true);//激活查询缓存   
             list = query.list();   
             session.close();   
  
       }   
       public void get(){   
  
             Session session = HibernateSessionFactory.getSession();   
             TUser t = (TUser)session.get("hibernate.TUser", 2);   
             System.out.println(t.getName());   
             session.close();   
  
     }   
  
}   

       测 试:控制台只输出一条SQL语句:Hibernate: select tuser0_.id as id0_, tuser0_.name as name0_, tuser0_.sex as sex0_ from test.t_user tuser0_(即Query query = session.createQuery("from TUser t")这句代码所对应的SQL).   executeQuery()方法与get()方法使用的是不同的Session!!可是 executeQuery()方法与get()方法只对数据库进行了一次操作,这就是二级缓存在起作用了.  

       结论:Hibernate二级缓存是SessionFactory级的缓存,它允许多个Session间共享,使用时需要使用第三方的缓存组件,新版Hibernate将EHcache作为默认的二级缓存实现.

Hibernate本身并未提供二级缓存的产品化实现(只提供了一个基于HashTable的简单缓存以供调试)

第三种:在多个应用实例,多个jvm间共享缓存。分布式缓存由多个应用缓存实例组成,通过某种远程机制(RMI,JMS)实现各个缓存实例间的数据同步,任何一个实例数据的修改都会导致整个集群间的数据的同步。
分享到:
评论

相关推荐

    CRL面向对象ORM开发框架

    CRL是一个面向对象的轻便型ORM业务框架 数据处理使用了对象/数据映射,数据操作采用Lamada表达式来表示,增加了可编程性和可靠性,出错机率低,同时也能用原生的SQL实现查询或操作 数据连接以编程方式进行配置,支持多个...

    Python库 | python-redis-orm-0.4.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:python-redis-orm-0.4.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    经量级的ORM开发框架CRL

    CRL是一个面向对象的轻便型ORM业务框架 数据处理使用了对象/数据映射,条件查询采用Lambda表达式来表示,增加了可编程性和可靠性,出错机率低,同时也能用原生的SQL实现查询或操作 数据连接以编程方式进行配置,支持多个...

    SpringBoot项目基于多维分类的知识管理系统.zip

    技术实现上,后端使用SpringBoot简化开发流程和配置工作,SpringMVC负责请求响应周期,MyBatis或Hibernate作为ORM工具与MySQL或其他数据库交互。前端可能采用Angular、React或Vue.js等现代JavaScript框架构建一个...

    基于SpringBoot学习论坛系统

    平台后台:springboot(框架) + redis(缓存中间件) + shiro(权限中间件) + mybatisplus(orm) + restful风格接口 + mysql(数据库) 开发环境:windows10 or windows7 , vscode or webstorm , idea + lambok (1)...

    我记录网站综合系统 v1.0.zip

    然后,打开 /framework/config 中的 orm.config 文件,根据上面的指示配置。 本版更新: √改善区块的拖动效果。原先区块拖动会变化宽度大小 √内容 app 后台可搜索标题 √ 用户可以删除自己的微博 √如果关闭...

    CRL快速开发框架2.2

    数据连接以编程方式进行配置,支持多个库,多种数据库类型,参见Global.asax中实现,首次使用请更改LocalSqlHelper.CreateDbHelper中数据连接 通过业务对象封装继承,实现业务重用性,比较常用的封装有,会员/账户系统,字典...

    基于Jantent的博客系统学习springboot+源代码+文档说明

    - 采用springboot开发,数据库使用连接池加orm框架的模式,对于系统的关键业务使用redis缓存,加快响应速度 - 整体系统采用门户网站+后台管理的方式搭建,门户主要展示博客内容,后台管理主要用于编辑文章,上传...

    mysql面试题史上最强汇总:基础知识+性能优化+备份与恢复+ 数据库设计+数据库管理+高可用性与容灾+安全性+ 框架集成等

    MySQL 是最常用的关系型数据库管理系统之一,因此在招聘和面试过程中 ...8. 框架集成:包括 MySQL 数据库在不同框架中的集成、ORM 框架的使用等。 9. NoSQL 数据库:包括 NoSQL 数据库的基本概念、类型、使用场景等。

    微信小程序-小程序商店

    文章/页面发布、分类、统计阅读次数。 提供文章形式的RSS聚合。 提供链接的添加、归类功能。 附件上传添加管理功能。 评论的管理,垃圾信息过滤功能。 文章静态html页面生成。 会员注册登录,后台管理功能。 lucene...

    飞蛙B2B2C商城电商系统 v2.1.8.zip

    FeiWa B2B2C借鉴了国内外优秀的开源程序与开发模式,使用面向对象的开发结构、MVC模式、单一入口、ORM影射等。封装了CURD和一些常用操作,在安装部署、数据查询、数据缓存、数据验证、模型处理、视图与布局、路由...

    AdminLTE-admin 轻量级权限管理框架.rar

    包含用户管理,角色管理,菜单管理,定时任务,图标工具,文章分类,文章列表等基础业务模块。 使用AdminLTE作为前端UI框架,添加菜单Tab页签完成内嵌iframe多页面功能,集成众多开源前端插件。 使用Mybatis集成Mybatis ...

    基于Java的在线购物系统的设计与实现1.rar

    缓存技术:利用缓存技术如Redis等来提升系统性能,减轻数据库负载。 异步处理:采用消息队列等技术实现异步处理,提高系统的并发处理能力和响应速度。 通过以上设计与实现,基于Java的在线购物系统能够为用户提供...

    asp.net知识库

    在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息 使用Relations建立表之间的关系并却使用PagedDataSource类对DataList进行分页 通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    数据库分类和常用数据库 Java面试题25.关系型数据库的三范式 Java面试题26.事务的四大特征 Java面试题27.mysql数据库最大连接数 Java面试题28.mysql和oracle的分页语句 Java面试题29.触发器的使用场景? Java面试题...

    我记录网站综合系统 1.9.rar

    一个.net平台下的全栈式、轻量级开发框架,包括 ORM、MVC、IOC、AOP、JSON、LOG 等,同时包括全套图文教程; 用这个框架开发的 SNS 互联网产品。 应用环境: windows/.net 2.0 或更高版本;支持3种数据库 Sql...

    基于生态农业的电子商务微信小程序毕业设计(论文).docx

    6.3数据库访问与 ORM 29 6.3.1数据表设计 29 6.3.2外键关系—外键约束 30 6.3.3数据库的假删除 30 6.3.4数据库E-R 图 30 6.3.5数据库冗余的合理利用 31 6.4 接口 32 6.4.1接口的粒度与接口分层 32 6.4.2API...

    Java博客系统Zblog2.zip

    文章/页面发布、分类、统计阅读次数。 提供文章形式的RSS聚合。 提供链接的添加、归类功能。 附件上传添加管理功能。 评论的管理,垃圾信息过滤功能。 文章静态html页面生成。 会员注册登录,...

    SpringBoot项目基于SpringBoot和VUE技术的智慧生活商城系统设计与实现.zip

    系统的核心功能包括商品展示与分类、搜索与推荐、购物车与结算流程、订单管理、支付处理、用户评价以及售后服务等。通过这些功能,消费者能够轻松浏览和购买各种智能化商品,享受便捷的购物乐趣。 技术实现上,后端...

    SpringBoot项目洗衣店订单管理系统.zip

    该系统的核心功能包括订单接收与管理、服务分类、价格计算、会员管理、电子收据生成、清洗进度实时更新以及财务报表统计等。通过这些功能,洗衣店工作人员可以轻松地录入和管理顾客订单,同时顾客也能通过系统查看...

Global site tag (gtag.js) - Google Analytics