hibernate一级缓存--即session级别缓存.docx

本文解析了MyBatis框架中通过session.get()获取对象的过程,包括快照创建和update.commit机制的工作原理。当首次获取对象时,会创建其快照;再次获取同一对象时则直接使用缓存。在执行update操作时,会比较对象与其快照的差异,仅当存在差异时才执行数据库更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



三图的说明

   快照及update.commit说明

第一次 session.get()方法因为session中还无此id记录,所以会发一条select语句将记录查出来封装成对象并保存两份,一份放入session缓存中,一份做为快照

第二次 session.get()因为此id对象已存在于session中会直接从session中拿,而不用再发sql去数据库查,

在执行session.update()时会先对比session中的对象与快照中的对象是否完全一致,不一致commit后才会发送 update sql到数据库进行更新

因此如果是非持久化对象 seddion.update()会先变为持久化对象,然后commit会发送update sql更新到数据库,如果是从数据库查询出来的对象,如果没有修改则 session.update() commit也不会发送sql语句



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值