【Hibernate框架】Hibernate框架常用方法

1.Hibernate中的常用方法的特点:
 a.save()和persist()

save()和persist()在有事务的情况下,执行是没有区别的;在没有事务的情况下,save()先执行,再回滚,persist()根本就不会执行

b.get()和load()

  b.1在没有查到数据的时候,get()方法会出现NullPoniterException异常,load()方法会出现ObjectFoundException的异常

  b.2load()方法在进行数据查询的时候会使用 延迟加载,get()方法在进行数据查询的时候是及时加载

延迟加载?

只有在真正的使用到查询出的对象的资源的时候(对象中的属性或者方法),hibernate才会去查询数据

c.saveorupdate()什么情况下是添加数据,什么情况下会更新数据

在操作数据的对象中,如果对象中含有主键值那么执行的就是update操作,没有主键值执行的就是save操作,但是可以再映射文件中进行修改

<!--

                            any:总是储存

                            none:总是更新

                            null:id为null时储存(默认)

                    -->

                   <id name="id" column="id" unsaved-value="none">

                            <!-- 主键生成策略 native自动匹配策略-->

                            <generator class="native"/>

                   </id>

2.HIbernate持久化对象的什么周期

对象什么周期会有3个状态

Transient(瞬时):在new对象后,在该状态下对象的特点是对象还没有与数据库发生任何的关系,不对应于数据库中的任一条记录;在持久状态下调用delete()方法,该对象会重新回到瞬时状态

Persistent(持久):调用get()或者load()方法的时候会进入持久状态;在持久状态下对象和数据库的记录都是一一对应的,在session没有被关闭的情况下,对象的任何变化都会自动同步到数据库中;在瞬时状态下调用save()或者saveorupdate()方法对象会进入持久状态,在离线状态下调用update()或者saveorupdate()方法对象会进入持久状态

Detached(离线)在持久状态下调用evict()clear()close()方法的时候,对象会进入离线状态;对象之任何属性变动,不会对数据库中的记录造成任何的影响

3.Hibernate的缓存机制

(1)缓存内存机制?

但第一次查询数据的时候,hibernate会先检查在缓存中是否存放有需要查询的数据,如果有就直接从缓存中取出数据,如果没有,再到硬盘中去查找需要的数据的时候,会把该数据备份到缓存当中

 (2)hibernate中的缓存分为一级缓存(session缓存)和二级缓存(sessionFactory缓存)

session缓存:这种缓存机制只在session的一次打开和关闭周期有效,session缓存是默认开启的

sessionFactory缓存:这种缓存机制只在sessionFactory的一次打开和关闭周期有效,二级缓存是需要手动配置开启的。

问题:

session缓存和sessionFactory缓存同时开启的时候,缓存机制是》

当第一次查询数据的时候,hibernate会先检查在一级缓存中是否存放有需要查询的数据,如果有就直接从缓存中取出数据,如果没有,检查在二级缓存中是否存放有需要查询的数据,如果有就直接从缓存中取出数据,如果也没有再到硬盘中去查找需要的数据,当查找到需要的数据的时候,会把数据备份到一级缓存以及二级缓存当中。

4.对象识别

可以根据需要自己编写一套识别对象的方式(比如:根据对象的id属性,或者name属性进行比较)而不是用对象地址比较

重写实体类中的equals()和hashcode()方法。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值