当前位置:网站首页>hiberate核心API/配置文件/一级缓存详解
hiberate核心API/配置文件/一级缓存详解
2022-06-25 22:01:00 【_七里香】
挺长,也详细。
如有帮助,欢迎留下足迹哦!
目录
核心API
Configuration
加载配置文件
SessionFactory
使用Configuration对象可以创建session工厂对象;根据核心配置文件中数据库的配置、映射文件部分来创建表;创建SessionFactory过程很消耗资源,建议一个项目只创建一个SessionFactory对象,即一个工具类即可。
具体实现:静态代码块,类加载时执行且只执行一次;

Session
类似于JDBC中的Connection。session是单线程对象,即只能自己用,不能共用,每次只能做一次。
Transaction
两个操作,一个commit(),一个rollback()
事务的四个特性:
原子性:事务要么都成功,要么都失败。
一致性:操作前后总量不变,如转账操作一个人多钱一个人少钱。
隔离性:多个事务同时操作同一个记录,各不影响。
持久性:最终事务要提交,commit到数据库。
配置文件详解
核心配置文件
1、数据库的信息配置是必须的,配置hibernate信息可有可无,注册映射文件必须的。
2、<hibernate-configuration>
<session-factory>注意位置。
3、必须在src下,且名称固定
映射配置文件
1、位置不固定,名称不固定,但不能是中文名
2、<properties name=”” column=””>,name中写的都必须与实体类的属性对应一致,column中写的都是数据库表中的列。class标签的name属性写的是全限定名(由类名右键复制可得到),table属性是将会生成的表名。
3、<properties name=”” column=””>标签中如果不写column属性,那么生成的字段名将会和name属性一致。
4、<properties name=”” column=”” type=””>标签的type属性一般不写,type属性用于设置生成表的字段的类型,自动根据实体类属性的类型转换为数据库所对应类型,不需要手动写。
Hibernate的一级缓存
解释
数据存到数据库中,数据库本身是文件系统。用流的方式操作文件效率不是很高
因此:
将数据存到内存中,此时不使用流的方式,可以直接读取内存中的内容。
把数据放到内存中,提高读取效率。
Hibernate框架中提供了很多优化方式:Hibernate一级缓存就是一个优化机制。
Hibernate缓存特点
一级缓存:默认就是打开的。使用范围是session的范围(session的创建-关闭之间),即session之外一级缓存是不存在的。
存储的数据必须是一种状态的数据--持久态的数据。
二级缓存:已经不使用了。有一种替代技术,被redis替代。默认不是打开的。使用范围是整个项目的范围(SessionFactory)。
验证一级缓存操作
<1>根据userid=1查询,返回对象
<2>再根据userid=1查询,返回对象,此时不会产生sql语句,可以验证一级缓存的存在。


一级缓存的执行过程
User u1 = session.get(User.class, 14);
执行时,先查询缓存中是否有数据,如果有则返回,如果没有就去查询数据库返回User对象(持久态的对象);同时将该持久态的对象放到一级缓存中(同时将一样的对象放到快照区),此时一级缓存中已有数据。
当第二次查询该目标时,仍然先去查询缓存看是否有数据(根据id值),如果有直接从一级缓存中获取数据;第二次查询时查到的虽然是同样的值但是会组成不同的对象。
一级缓存的存储结构
不是存储整个对象的形式,而是只存储对象的值,如userid=14,username=多少等;
一级缓存的特性及原理
修改操作:验证一级缓存的特性:持久态会自动更新数据库,不需要调用update()方法

原理:
创建session时,会创建一块一级缓存区,同时创建一块一样的区域--快照区(副本);当执行u1.setPassword("mimmmm");时,会将一级缓存中的user值进行修改,快照区里的user值不变,数据库中也不变;要修改的值没有变化时对数据库不做更改,性能很高。
即,一级缓存在事务提交之前代表用户的操作,快照区中的值代表的是数据库中现在的值,在提交事务时会比较一级缓存中的内容与快照区中的值是否一致,如果一致则不做修改,如果不一致则按一级缓存中的内容来更新数据库,此时快照区的值同时更新。

Hibernate的事务操作
事务代码的规则写法
try{
开启事务
提交事务
}catch(){
回滚事务
}finally{
关闭事务
}
边栏推荐
猜你喜欢

元宇宙标准论坛成立

毕业旅行 | 伦敦5日游行程推荐

Beacon realizes asset management and indoor positioning based on 5.2 ultra-low power Bluetooth module efr32 (bg22ax)

Circuit module analysis exercise 6 (switch)

Xampp重启后,MySQL服务就启动不了。

【AXI】解读AXI协议原子化访问

Multithreaded learning 2- call control

How to use drawing comparison function in CAD

Leaky API interface practical development series (13): gooseneck cloud service php-api two-dimensional array parameter transfer solution

问题记录与思考
随机推荐
Xinchida nd04 nd04c nrf52832 (52810) ble module (low power Bluetooth communication module) at command test
【opencv450-samples】读取图像路径列表并保持比例显示
牛客小白月賽52--E 分組求對數和(二分)
Xampp重启后,MySQL服务就启动不了。
【opencv450 samples】创建图像列表yaml
Live800 online customer service system: do business across time and space, starting from each interaction
Ue4 Ue5 combine le plug - in de reconnaissance vocale de bureau pour la reconnaissance vocale
UE4\UE5 蓝图节点Delay与Retriggerable Delay的使用与区别
牛客小白月赛52--E 分组求对数和(二分)
Leetcode(605)——种花问题
Multi modal data can also be Mae? Berkeley & Google proposed m3ae to conduct Mae on image and text data! The optimal masking rate can reach 75%, significantly higher than 15% of Bert
剑指 Offer 46. 把数字翻译成字符串(DP)
建立自己的网站(15)
Oracle - getting started
Efr32bg22 ble module (low power Bluetooth communication module) at command test
首个大众可用PyTorch版AlphaFold2复现,哥大开源OpenFold,star量破千
Typora writing DOS commands
24class static member
问题记录与思考
Comp2913 database