1.hibernate.cfg.xml
代码如下 | 复制代码 |
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
|
2.持久化类 Person
代码如下 | 复制代码 |
package org.Rudiment.hibernate; import java.util.ArrayList; public class Person { |
3. Person.cfg.xml
代码如下 | 复制代码 |
|
4. 操作持久化类的功能类 PersonHandler
代码如下 | 复制代码 |
package org.Rudiment.hibernate; import java.util.ArrayList; import org.hibernate.Hibernate; public class PersonHandler { |
注:
1.只取消PersonHandler这个类main方法的第一个注释块,将会插入一条新的记录到数据库名为hibernate的Person表中。
代码如下 | 复制代码 |
mysql> use hibernate; mysql> select * from school; |
2.只取消PersonHandler这个类main方法的第二个注释块,将会更新查询出来的记录到数据库名为hibernate的Person表中。
代码如下 | 复制代码 |
mysql> select * from person; mysql> select * from school; |
3.只取消PersonHandler这个类main方法的第三个注释块,将会删除查询出来的记录
下面详谈这些方法的一些注意的地方:
在说这些方法的时候,我们要先约定一些词语意思,Hibernate中的持久化对象支持如下几个对象状态:
瞬态:对象由 new 操作符创建,并且尚未与 Hibernate Session 关联的对象被认为处于瞬态。瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识。如果程序中失去了瞬态对象的引用,瞬态对象将被垃圾回收机制销毁。使用Hibernate Session 可以将其变为持久化状态。
持久化:对象于 Hibernate Session 关联上。对这个对象属性的修改会影响数据库的数据内容。
脱管:曾今持久过的对象。由于与 Hibernate Session 脱离关联,这个对象称为脱管。
详细的概念请查看:轻量级JavaEE企业应用实战P386
=========================save()与persist()方法============================
Hibernate之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯。另一方面,save() 和 persist() 方法还有一个区别:使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性(即对应记录的主键值);但使用persist()方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对象的标识属性值,所以程序执行 save() 方法会立即将持久化对象对应的数据插入数据库;而persist() 则保证当它在一个事务外部被调用时,并不立即转换成 insert 语句,这个功能是很有用的,尤其当我们封装一个长会话流程的时候,persist() 方法就显得尤为重要了。
=========================load()与get()方法============================
load() 方法和 get() 方法的主要区别在于是否延迟加载,使用 load() 方法将具有延迟加载功能,load() 方法不会立即访问数据库,当试图加载的记录不存在时,load() 方法可能返回一个未初始化的代理对象;而 get() 方法总是立即访问数据库,当试图加载的记录不存在时,get()方法将直接返回 null
========================= 脱管对象再次利用注意事项 =========================
对于一个曾经持久化过的、但现在已脱离了 Session 管理的持久化对象,我们把它称为处于脱管状态。当我们修改脱管对象的状态后,程序应该使用新的 Session 来保存这些修改。Hibernate 提供了 update()、merge()和updateOrSave()等方法来保存这些修改。当我们用另外一个Session来保存这种修改后,该脱管对象再次回到Session的管理之下,也就再次回到持久化状态。
========================= update() 和 merge() 方法 =========================
当需要使用update来保存程序对持久化对象所做的修改时候,如果不清楚该对象是否曾经持久化过,那么程序可以选择使用 updateOrSave() 方法,该方法自动判断该对象是否曾经持久化,如果曾经持久化过,就使用 update() 操作; 否则将使用 save() 操作。
merge()方法也可将程序对脱管对象所做的修改保存到数据库,但 merge() 与 update() 方法最大的区别是: merge() 方法不会持久化给定对象。举例来说,当我们执行 session.update(a)代码后,a对象将会变成持久化状态;而执行 session.merge(a)代码后,a对象依然不是持久化状态,a 对象依然不会被关联到 Session 上
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级