【toggle的源码】【ssm打印源码】【hey ui源码】hibernatesave源码

时间:2024-11-26 22:27:52 来源:php网源码 编辑:adhoc协议栈源码

1.hibernate中的update()与saveOrUpdate()的区别,load()与get()的区别,Hibernate与JPA的区别。
2.hibernate批量保存原理
3.hibernate session.save()怎么实现底层代码怎么看求告诉

hibernatesave源码

hibernate中的update()与saveOrUpdate()的区别,load()与get()的区别,Hibernate与JPA的区别。

       saveOrUpdate()会根据所给对象的id不同,来选择使用save或者update:如果对象id为null,就执行save;如果对象id从来没有persistent过,也执行save,如果对象是persistent对象的一个新的verison,那么也save,除了上面的情况其他都执行update;

       load()方法在你想load的对象不存在时,会throw exception,而get方法就返回一个null给你;

       hibernate是实现对象persistence的orm的实现,JPA是整个对象persistence的规范。

hibernate批量保存原理

       数据的保存,更新和删除:

        1、Session.save()方法:

       Session.save()方法用于实体对象的持久化保存,也就是说当执行session.save()方法时会生成对应的insert SQL语句,完成数据的保存。如下面的toggle的源码代码:

       User user=new User();

       user.setName(“zx”);

       Transaction tx=session.beginTransaction();

       session.save(user);

       tx.commit();

       当执行到session.save()方法时,Hibernate并不会马上生成insert SQL语句来进行数据的保存,而是当稍后清理session的缓存时才有可能执行insert SQL语句,那么session.save()方法到底会执行哪些步骤呢?请看进行了如下总结:

       一、 在session的内部缓存中寻找保存对象,如果找到了,则认为此数据已经保存(曾经执行过insert操作),实体对象已经处于persistent状态,直接返回。此时即使数据相比之前的ssm打印源码状态发生了变化,也将在事务提交时由脏数据检查来判定是否需要执行update操作。

       二、 如果实体对象实现了lifecycle接口,那么将执行待保存对象的onSave()方法。

       三、 如果实体对象实现了Validatable接口,那么将会执行相应的hey ui源码validate()方法。

       四、 如果存在拦截器对象,那么将会执行Interceptor.onSave()方法。

       五、 构造insert SQL语句完成数据保存。

       六、 数据保存成功后,mybatisplus改写源码设定实体对象的id为插入记录的id。

       七、 将保存后的实体对象纳入Hibernate的内部缓存(一级缓存)。注意Hibernate不会把保存后的实体对象纳入二级缓存,因为刚刚保存过的实体对象很可能在之后被修改,缓存的频繁更新以及带来的同步问题代价,超出了缓存该对象所带来的弯腰捡钱源码收益。

       八、 最后如果该对象有关联对象,那么将会递归处理该级联对象。

hibernate session.save()怎么实现底层代码怎么看求告诉

       不得不说,你截图里的这个箭头指的很帅!

       我来解答一下,你先在你的代码里面,有session.save(obj)调用的地方,按下Ctrl键,然后把鼠标移动到save上(注意不要点下去),会出现一个小菜单,如下图:

       因为session本身是个接口,所以你要看其实现的话,就选第二项“open implemention",就是打开实现的意思,由于session这个接口有可能有多个类实现这个接口(不同的hibernate版本不同),此后还有可能让你选类名,你就选SessionImple这个类,然后打开的代码如下:

       看到没,上面的注释里说的,save() operations,这里的三个方法之间的调用关系,就说明这三个方法就是hibernate的session.save(obj)方法的实现所做的操作了。

       不过真心不明白你看这个代码做什么,如果是你保存不成功的话,一般hibernate这种老牌框架是不会出问题的,原因在你自己代码上;如果你想研究hibernate源代码,进而自己写一个ORM框架,算我没说。

copyright © 2016 powered by 皮皮网   sitemap