ORM框架Hibernate (二) 持久化对象的三种状态分析

ORM框架Hibernate (二) 持久化对象的三种状态分析

  1. 引入
    1. 在解压Hibernate有好几十兆就感觉这比Struts大多了,应该比Struts要深奥一些果然是这样,不过如果你看了这篇文章,你也会理解的。
    2. 这里先不说对象的状态,本来对象挺简单的Hibernate又把对象分了三种状态,初次让人看了有点头晕的感觉怎么这么复杂?
    3. 通过看了一些资料体会是不应该先理解各种状态以及他们的用法,而应该先重点理解一下Hibernate里面的session缓存机制,如果对session理解了自然而然的就懂了对象的状态。
    4. Hibernatesession并不是通常用的那个会话session,此session非彼session
  1. Session机制
    1. Hibernate中加入session是为了减少访问数据库频率、提高数据库性能,在session中定义了Java集合,Java Collection指的是List、Map、Set等,这些都实现了Java Collection接口,他们用于存储很多的实体对象并构成了session缓存。
    1. 当像Java对象被session管理时,对象会加入到sessionMap里面缓存起来,session提供了一些方法可以保证缓存与数据库状态保持同步。
      1. 例如你提交事务的时候会自动清理缓存,并更新数据库;当然你也可以手动调用flush()方法实现。
    1. 下面就出现了对象三种状态
      1. 如果一个实体对象加入到了SessionMap里,Map会保存该对象的一个引用,这个对象就会被session管理,这个时候我们就称该对象为持久化对象(Persistent)
      2. 没有被session管理的对象成为非持久化对象,非持久化又分为临时对象(Transient)和游离对象(Detached)
  1. 对象三种状态
    1. 临时状态(Transient)
      1. 说的通俗一点就是一个对象刚创建的时候,没有被其它对象引用,从对象生命周期来看刚刚创建所以数据库中也不会有它的记录。
    1. 持久化状态(Persistent)
      1. 它是关联session的对象,即被session引用了同时数据库中也存在它的记录。
    1. 游离状态(Detached)
      1. 游离对象是断开了session关联,数据库中已经它对应的数据了,由此可见,可以对象状态是与session紧密联系的。
    1. 对象的三种状态之间可以相会转换,看下面一张图
      1. ORM框架Hibernate (二) 持久化对象的三种状态分析
      1. 上图清楚的说明了各个对象之间得转化关系以及调用方法。
  1. CRUD操作
    1. HibernateCRUD是建立在对象各种状态之上的操作,它也提供了一些简单接口供我们使用,利用这些接口让我们插入、更新、分页变得很简单,以前分页需要写好几个SQL语句嵌套才能完成,如果在Hibernate中只需要调用Query接口的setFirstResult()和setMaxResults()就可以分页,很简单。
    1. 知道了对象的状态,对对象的操作也就会了,就不举例子说明怎么插入查询等,主要还是理解了一些概念。对于操作经常使用就会熟悉。
    1. 框架带来的好处还是很多的,建议多使用框架。

转载于:https://www.cnblogs.com/lilongsheng1125/p/4978569.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110043.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Custom Mutator Fuzz】Libprotobuf + AFLapp Custom Mutator[通俗易懂]

    【Custom Mutator Fuzz】Libprotobuf + AFLapp Custom Mutator[通俗易懂]这篇文章主要是在libprotobuf-mutator_fuzzing_learning开源模糊测试练习项目第4个练习的基础上进行详细讲解,主要内容为通过libprotobuf-mutator为AFL++提供自定义protobuf结构突变。练习和写作的过程中也是踩了不少的坑,文章末尾会有我遇到的全部问题及解决办法

    2022年9月13日
    0
  • linux中如何用ftp命令下载文件,linux中ftp下载文件命令的用法

    linux中如何用ftp命令下载文件,linux中ftp下载文件命令的用法linxu下的ftp命令是用来下载文件或者上传文件的,下面由学习啦小编为大家整理了linux的ftp下载文件命令的用法的相关知识,希望对大家有帮助!一、linux中的ftp下载文件命令的用法从远程ftp服务器下载文件的命令格式:get远程ftp服务器上当前目录下要下载的文件名[下载到本地机器上当前目录时的文件名],如:getnmap_file[nmap]意思是把远程ftp服务器下的文件nm…

    2022年8月24日
    7
  • C语言:判断回文字符串的两种简单方法

    C语言:判断回文字符串的两种简单方法我的机器学习教程「美团」算法工程师带你入门机器学习已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~之前写…

    2022年6月6日
    19
  • PLC编程基础[通俗易懂]

    PLC编程基础[通俗易懂]1.开始一个新的工程按照以下步骤来建立一个新的工程:  (1)选择工具栏中的新建按钮。      (2)定义工程的设备条目。  (3)保存工程当一个新的PLC被添加到工程中的时候,将创建以下空表:1)空的本地符号表;2)全局符号表;3)IO表;4)PLC内存数据;5)PLC设置数据。2.编写一个梯形图程序下面以一个交通灯次序控制为例说明,该交通灯次序是一个标准的英国交通灯次序,顺序如下:只有红灯→…

    2022年9月8日
    1
  • MySQL之权限管理

    MySQL之权限管理MySQL之权限管理

    2022年4月24日
    50
  • 十二、适配器模式——解决充电的烦恼 #和设计模式一起旅行#

    轻轻的我走了, 正如我轻轻的来; 我轻轻的招手, 作别西天的云彩。 ——徐志摩 《再别康桥》故事背景把奶茶店盘了出去,我和设计模式MM,继续上路,坐着冒着烟的飞机来到了剑桥,这里真是个美丽的地方,我用手机拍了很多的照片手机没电了,也玩的累了。找了个酒店 ,准备休息一下,然后给我的手机充充电。 才知道英国的插座都是下面这个样子:而我的…

    2022年2月27日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号