hibernate

  • 特点
  • 将对数据库的操作转换为对Java对象的操作,从而简化开发。通过修改一个“持久化”对象的属性从而修改数据库表中对应的记录数据。
  • 提供线程和进程两个级别的缓存提升应用程序性能。
  • 有丰富的映射方式将Java对象之间的关系转换为数据库表之间的关系。
  • 屏蔽不同数据库实现之间的差异。在Hibernate中只需要通过“方言”的形式指定当前使用的数据库,就可以根据底层数据库的实际情况生成适合的SQL语句。
  • 非侵入式:Hibernate不要求持久化类实现任何接口或继承任何类,POJO即可。

        
  • 缓存


  • 经常读但很少被修改,就可以考虑使用第 二级缓存
  • 临时状态(Transient):也叫自由态,只存在于内存中,而在 数据库 中没有相应数据。用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;
  • 持久化状态(Persistent):与session关联并且在数据库中有相应数据。已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;
  • 游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。 
    特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象;

     
        

    三态之间的转换方法:

    ①如何成为自由态?对象通过构造方法成为自由态;持久态和游离态则通过session的delete方法成为自由态

    ②如何成为持久态?对象可以由session的load或get方法直接成为持久态;自由态对象可以通过save,saveOrUpdate或persist方法成为持久态;游离态对象则可以通过update,saveOrUpdate成为持久态

    ③如何成为游离态?游离态只能由持久态转换而来,通过close或clear方法实现。

    几种转换方法的对比:

    1.get 与load

    都是从数据库中加载数据封装为Java对象,使得java对象从自由态直接变为持久态;

    但是有两点区别:①get返回对象可以为null,load返回值则始终不为null,找不到时会抛异常②get即时执行insert,而load则是在使用此对象时才执行insert

    2.save,update与saveOrUpdate

    save是将自由态转为持久态,而update是将游离态转为持久态,saveOrUpdate可以说是两者的综合,它执行时先判断对象的状态(主要是通过有无主键判断的),若是自由态,则save,若是游离态,则update

    3.save与persist

    两者都是将对象由自由态转为持久态,但返回值不同:save返回主键值,而persist不返回

    4,saveOrUpdate与merge

    两者都是将自由态或游离态对象与数据库关联,但merge不改变对象的原有状态

    此外,对clear与flush方法也作介绍。clear是将session中的对象全部变为游离态,是对象由持久态变为游离态的一种方法(另外一种是关闭session);flush方法时为了使update操作能即时进行(正常情况下,只有在事务关闭时才进行update操作)。


“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

grapepaul

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值