初学Hibernate(一)

 

Hibernate 简单开发步骤:

1 、准备工作:引入 Hibernate 包及其依赖包和 jdbc 驱动包,并在 Hibernate 文件中的project/etc 下,拷贝log4j.properties 放到项目类路径中

2 、创建实体类 : 实体类一般指的是只有 attrbute property java 类,并且这个类必须有一个无参的构造方法

3 、创建实体类映射文件 (User.hbm.xml) 可从示例project\tutorials\eg\src\main\resources\org\hibernate\auction 目录下拷贝,一般与model 放一个包下;

4 、创建 Hibernate 配置文件 hibernate.cfg.xml

hibernate.cfg.xml 文件 -> project\tutorials\web\src\main\resources \ 找到hibernate.cfg.xml 文件,有关数据库连接配置 -> project/etc/hibernate.properties 找到其中的配置

5 、利用 Hibernate API 测试下

读取类路径根目录下的 hibernate.cfg.xml 配置文件,创建 SessionFactory ,创建 Hibenate Session

开启事务— >CRUD 操作— > 持久化对象— > 提交事务— > 出现异常,需回滚事务— > 关闭 session ,一般 R 不用什么事务处理

Hibernate UD 操作:

1.         session 更新时,应当注意先把对象 load 上来,然后更新它,那么这个对象就是持久化的对象了,其他字段或属性更新时就不会置为空,因为 Hibernate 会把所有的属性更新一遍,结果原来的属性如果变化了则更新,没变化则还是原来的值;假如是 new 出来然后 setId 接着 set 属性,这样的话,因为这个 new 出来的对象是离线对象,接着 update 会把它更新成持久化对象,相应的其他没更新的属性也要更新。

2.         delete 则不会发生上面的现象,因为 delete 是把持久化对象弄成瞬时对象,因此就不会出现上面的现象。

Hibernate load 延迟加载:

1.         调用 load 方法时(在设置 lazyTRUE 的情况下),会出现延迟加载的现象,当真正使用到这个对象的属性时才发 Sql 语句,但有人会奇怪取得这个对象的 id 时却没发出 sql 语句,因为 load 本身就是根据 idload 的,所以 id 它本身就在内存中,如下面的语句: session.load(User.class , 8) ,这个 8 已经存在内存中了。

2.         Hibernate 中查找不存在的记录用 get 或者设置成 falseload, 会抛出 ObjectNotFoundException: No row with the given identifier exists ,而设置成 lazy=true 则不会报错,但在真正使用到这个对象的属性时会报错 ObjectNotFoundException

3.           懒加载只有在 session 打开的状态下才有效, session 关闭将不会再加载延迟对象 , 假设这属性已经存在的话,它就不会抛这个异常,因为这个对象的属性已经加载到内存中 LazyInitializationException:could not initialize proxy - no Session

4.         比较 get 操作,它一执行完立马发出 sql 语句

Session 什么时候发出 insert/update/delete/select 语句

1.      id 生成策略是 native ,调用 save 方法,马上发出 insert 语句,将内存中的状态同步到数据库, id 生成策略是 uuid ,提交后才发出 insert 语句。

2.         关于更新操作,一般先 getload 加载这个对象到内存中,然后更新的话 Hibernate 会检查更新的属性有没有变化,没变化则不会发 sql 语句,有变化才发出 update 语句,因此更新持久化的对象时没必要显示地调用 update 方法,因为提交后才发出 sql ,删除也一样的, Hibernate 它会尽量延迟发出 sql 语句

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值