-
ORM框架Hibernate (二) 持久化对象的三种状态分析
- 引入
- 在解压Hibernate有好几十兆就感觉这比Struts大多了,应该比Struts要深奥一些果然是这样,不过如果你看了这篇文章,你也会理解的。
- 这里先不说对象的状态,本来对象挺简单的Hibernate又把对象分了三种状态,初次让人看了有点头晕的感觉怎么这么复杂?
- 通过看了一些资料体会是不应该先理解各种状态以及他们的用法,而应该先重点理解一下Hibernate里面的session缓存机制,如果对session理解了自然而然的就懂了对象的状态。
- Hibernate中session并不是通常用的那个会话session,此session非彼session。
- Session机制
- Hibernate中加入session是为了减少访问数据库频率、提高数据库性能,在session中定义了Java集合,Java Collection指的是List、Map、Set等,这些都实现了Java Collection接口,他们用于存储很多的实体对象并构成了session缓存。
- 当像Java对象被session管理时,对象会加入到session的Map里面缓存起来,session提供了一些方法可以保证缓存与数据库状态保持同步。
- 例如你提交事务的时候会自动清理缓存,并更新数据库;当然你也可以手动调用flush()方法实现。
- 下面就出现了对象三种状态
- 如果一个实体对象加入到了Session的Map里,Map会保存该对象的一个引用,这个对象就会被session管理,这个时候我们就称该对象为持久化对象(Persistent)。
- 没有被session管理的对象成为非持久化对象,非持久化又分为临时对象(Transient)和游离对象(Detached)。
- 对象三种状态
- 临时状态(Transient)
- 说的通俗一点就是一个对象刚创建的时候,没有被其它对象引用,从对象生命周期来看刚刚创建所以数据库中也不会有它的记录。
- 持久化状态(Persistent)
- 它是关联session的对象,即被session引用了同时数据库中也存在它的记录。
- 游离状态(Detached)
- 游离对象是断开了session关联,数据库中已经它对应的数据了,由此可见,可以对象状态是与session紧密联系的。
- 对象的三种状态之间可以相会转换,看下面一张图
- 上图清楚的说明了各个对象之间得转化关系以及调用方法。
- CRUD操作
- Hibernate的CRUD是建立在对象各种状态之上的操作,它也提供了一些简单接口供我们使用,利用这些接口让我们插入、更新、分页变得很简单,以前分页需要写好几个SQL语句嵌套才能完成,如果在Hibernate中只需要调用Query接口的setFirstResult()和setMaxResults()就可以分页,很简单。
- 知道了对象的状态,对对象的操作也就会了,就不举例子说明怎么插入查询等,主要还是理解了一些概念。对于操作经常使用就会熟悉。
- 框架带来的好处还是很多的,建议多使用框架。
-
相关阅读:
Struts2框架详解
Eclipse利用Axis2插件构建Web Service并测试
解决JS中各浏览器Date格式不兼容的问题
Struts2框架下表单数据的流向以及映射关系
JMS总结
第一次博客园
微信OAuth2网页授权
将List转换成DataTable
对文件的读写操作
Excel文件的导出操作
-
原文地址:https://www.cnblogs.com/bbsno1/p/3271396.html
Copyright © 2020-2023
润新知