hibernate学习 六 Hibernate缓存
缓存:
如果在集群环境下使用Hibernate时,(集群有节点A ,节点B) 当请求,发往A节点,A在数据库中修改了一条记录,然后节点B的缓存中如何实时的更新节点A修改的新数据
hibernate本身的一级缓存不能跨越进程, 需要第三方缓存的支持, Ehcache缓存就可以实现
Hibernate缓存:
一级缓存:
在同一个Session里面,第一次调用get()方法, Hibernate先检索缓存中是否有该查找对象,发现没有,Hibernate发送SELECT语句到数据库中取出相应的对象,然后将该对象放入缓存中,以便下次使用,第二次调用get()方法,Hibernate先检索缓存中是否有该查找对象,发现正好有该查找对象,就从缓存中取出来,不再去数据库中检索,没有再次发送select语句。
一个session不能取另一个session中的缓存。
二级缓存:
SessionFactory级别的缓存,可以跨越Session存在,可以被多个Session所共享。
(1)经常被访问
(2)改动不大
(3)数量有限
(4)不是很重要的数据,允许出现偶尔并发的数据。
用户的权限:用户的数量不大,权限不多,不会经常被改动,经常被访问。例如组织机构。
Hibernate查找对象如何应用缓存?
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;
查不到,如果配置了二级缓存,那么从二级缓存中查;
如果都查不到,再查询数据库,把结果按照ID放入到缓存, 删除、更新、增加数据的时候,同时更新缓存。
QBC(Query By Criteria) API提供了检索对象的另一种方式,:
Hibernate取部分字段?
QBC是HQL更上层的封装,会查询所有字段。要想只使用部分字段,需要像写SQL一样写HQL。
一种方案是:给实体类再加一个构造函数,构造函数只有必须的字段,这样就不会全查( String hql=”select new Employee(e.id,e.name_cn) from Employee e”; )
另外一种是直接写SQL,得到的东西再组装成对象。Query query = getSession().createQuery(hql).setResultTransformer((Transformers.aliasToBean(clazz)));
DetachedCriteria的投影方式可以取得部分字段。
hibernate多表联合查询?
HQL:配置关系的话,可以不用join; 不配关系的话,HQL中写join;
QBC的话,用createCriteria可以实现多表关联。Criteria repA=cri.createCriteria("repAward", CriteriaSpecification.LEFT_JOIN);
Criteria works=cri.createCriteria("works", CriteriaSpecification.LEFT_JOIN);
HIbernate session 与 connection关系?
- session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用。
- 多个session与一个connection绑定,底层操作数据库的时会进行同步。
- 如果某个connection正在被某个session占用, open一个session,则创建一个新的connection与之对应。
- 有连接池的情况下,session关闭后,connection不一定关闭, 还可以查询到应用占用的连接,若超过最大空闲时间,被连接池回收释放。
- 有连接池的情况下,session使用完后不关闭,该connection被占用,若超过连接回收时间,也可被连接池回收释放。
- 非连接池情况下,一个session占用一个connection,若不关闭,该connection无法释放。
- 每个open的session都需要close。
连接池是多个端口吗?
套接字是计算机网络中应用层和传输层之间的接口。如果应用程序需要使用网络功能,只需要调用套接字API即可。每个进程可以使用多个套接字,每个套接字都有一个标识符。对于TCP套接字,其标识符结构为:源IP,源端口,目的IP和目的端口。对于客户服务器架构的网络程序,服务器进程的端口是周知的,例如MySQL5543,而客户进程端口是随机分配的。也就是说,每个数据库连接对象,和数据库服务器通信都依赖于它自己的套接字,而这个套接字的端口号是各不相同的,尽管同属于一个进程。
hibernate学习 六 Hibernate缓存的更多相关文章
- Hibernate基础学习(六)—Hibernate二级缓存
一.概述 Session的缓存是一块内存空间,在这个内存空间存放了相互关联的Java对象,这个位于Session缓存内的对象也被称为持久化对象,Session负责根据持久化对象的状态来同步更 ...
- Hibernate学习0.Hibernate入门
Hibernate是什么 面向java环境的对象/关系数据库映射工具. 1.开源的持久层框架. 2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据 ...
- hibernate学习之Hibernate API
1. Hibernate Api分类 1)提供访问数据库的操作(如保存,更新,删除,查询)的接口.这些接口包括:Session, Transaction,,Query接口. 2)由于配置Hiberna ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- Hibernate学习之Hibernate流程
Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate. ...
- Hibernate学习笔记--------3.缓存
一.一级缓存 一级缓存又称为“Session缓存”或者“会话级缓存”,通过Session从数据库查询实体时,会把实体在内存中存储起来,下一次查询同一实体时不再再次执行sql语句查询数据库,而是从内存中 ...
- Hibernate学习之二级缓存
© 版权声明:本文为博主原创文章,转载请注明出处 二级缓存 - 二级缓存又称“全局缓存”.“应用级缓存” - 二级缓存中的数据可适用范围是当前应用的所有会话 - 二级缓存是可插拔式缓存,默认是EHCa ...
- Hibernate学习之一级缓存
© 版权声明:本文为博主原创文章,转载请注明出处 Hibernate缓存: - 缓存是为了降低应用程序对物理数据源访问的频次,从而提供应用程序的运行性能的一种策略 - Hibernate缓存是提升和优 ...
- Hibernate学习六----------CRUD
© 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...
随机推荐
- /usr/bin/mysqld_safe_helper: Cannot change uid/gid (errno: 1) (转)
From: https://www.rootusers.com/how-to-fix-mariadb-10-0-29-selinux-update-failure/ 安装mysql 10.0.29后, ...
- ASP.NET动态网站制作(2)--css(1)
前言:这节课主要讲关于css的相关内容. 重点:1.css(Cascading Style Sheet)叠层样式表,做网页的外观,是用来控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 2 ...
- 【BZOJ3319】黑白树 并查集
[BZOJ3319]黑白树 Description 给定一棵树,边的颜色为黑或白,初始时全部为白色.维护两个操作:1.查询u到根路径上的第一条黑色边的标号.2.将u到v 路径上的所有边的颜色设为 ...
- 【BZOJ1150】[CTSC2007]数据备份Backup 双向链表+堆(模拟费用流)
[BZOJ1150][CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此 ...
- Django Web开发指南笔记
Django Web开发指南笔记 语句VS表达式 python代码由表达式和语句组成,由解释器负责执行. 主要区别:表达式是一个值,它的结果一定是一个python对象:如:12,1+2,int('12 ...
- Oracle | PL/SQL Check约束用法详解
1. 目标 实例讲解在Oracle中如何使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表的列中增加额外的限制条件. 注: CHECK约束不能在VIEW中 ...
- vi中如何替换某字符成“回车”?
vi中如何替换某字符成“回车”? 在 vi 中::s/,/^M/g (you need to type CTRL-V <CR> to get a ^M here)VIM - Vi IMpr ...
- ubuntu nohup命令用法
让程序在后台运行 该命令的一般形式nohup command & 程序在后台运行并打印日志 nohup ./china_fund.py > china_fund.file 2>&a ...
- 前端基础之---css
css 介绍 css 规则有两个主要的部分构成 : 选择器 , 以及一条或多条声明. 现在的互联网前端分为三层 : ● HTML :超文本标签机语言,从语义的角度描述页面结构. ● CSS : 层 ...
- Makefile中的$(@:_config=)什么意思?【转】
本文转载自:https://blog.csdn.net/a8082649/article/details/24252093 已经编译出bin文件了,现在研究一下makefile,把遇到的问题记录下来: ...