深入浅出hibernate笔记

实体的3种状态:Transient自由 Persistent持久 Detached游离
1、处于Persistent状态的对象将自动被固化到数据库中。
2、Detached和Transient区别:
Detached对象可以再次与某个session实例相关联而成为Persistent对象。
Transient状态的实体对象无主键信息,而Detached状态的实体对象包含其对你更数据库记录的主键值。

 

VO和PO
1、处于Transient和Detached状态的对象称为值对象(VO即Value Object)
处于Persistent状态的对象称为持久对象(PO即Persistence Object)
2、MVC架构中,位于Model层的PO时候允许被传递到其他层面,犹豫PO的更新最终将被映射到实际数据库中,
如果PO再其他层面比如view层发生变动,可能会对Model层造成意想不到的破坏。
3、BeanUtils.copyProperties();

 

equals和hashcode
1、colection在判断两个对象时候相等的时候,会先调用对象的hashCode方法,如果hashCode相同
的话,随即调用其equals方法,如果两次判断都为真,则认为对比的两个对象相等。
2、不覆盖equals和hashcode时候有个问题:实体对象的跨session识别。

 

数据缓存
1、缓存位于数据库和数据访问层之间。
2、ORM读取数据时,根据其缓存管理策略,首先在缓存中查询,如果缓存命中,则直接以此数据作为查询结果,
避免了数据库调用的性能开销。
3、ORM数据缓存包括:
事务级缓存(随session创建销毁)、
应用级缓存(同SessionFactory创建的session实例共享此缓存)、
分布式缓存(多个JVM之间共享)

 

Hibernate数据缓存
1、分为:内部缓存(session level一级缓存);二级缓存(sessionfactory level二级缓存)
2、引入二级缓存时需要考虑:
 a、数据库是否与其他应用共享(放弃二级缓存使用)
 b、应用是否需要部署在集群环境中(分布式缓存机制)
3、hibernate中启用二级缓存需要配置hibernate.cfg.xml和ehcache.xml,然后再映射文件中指定各个映射
实体的缓存同步策略。

 

缓存同步策略
1、缓存同步策略可以应用于实体类和集合属性。
2、hibernate的四种缓存同步策略:read-only、nonstrict-read-write、read-write、transactional。

 

hiberante事物管理
1、基于JDBC的事务管理  默认 使用commit实现
2、基于JTA的事务管理
3、JTA提供了跨session的事务管理能力,这是与JDBC事务最大的区别。
4、JDBC事务由connection管理,事务周期限于session的周期。JTA事务管理则由JTA容器实现,JTA事务横跨多个session。
5、嵌套事务会导致运行期错误。
6、业务逻辑的实现过程中,往往需要保证数据访问的排他性,保证数据在某个操作中不会被外界修改,所谓的“锁”。
包括悲观锁和乐观锁。
7、悲观锁的实现,依靠数据库提供的锁机制。for update
8、乐观锁大多是基于数据版本记录机制实现。optimistic-lock="version"

 

延迟加载lazy loading
1、实体对象的延迟加载
load方法可以指定可以返回目标实体对象的代理,hibernate引入CGLib作为代理机制实现的基础。
2、集合类型的延迟加载
3、属性延迟加载

 

数据批量导入
1、hibernate
2、JDBC preparedStatement.excuteBatch();

 

hibernate回调和拦截机制
1、hibernate通过lifecycle、validatable接口制定了实体对象CRUD过程中的回调方式。
实体必须实现lifecycle、validatable接口。
2、Interceptor接口定义了hibernate中的通用拦截机制。session创建时即可指定加载相应的Interceptor,
之后session的持久化操作动作都将首先经由此拦截器捕获处理。
3、Interceptor典型应用:数据稽核。

 

Session管理
ThreadLocal是java中一种较为特殊的线程绑定机制。通过ThreadLocal存取的数据,总是与当前线程相关。

 

hibernate性能优化 常见的优化策略
1、允许的情况下选用最新版本的hibernate
2、制定合理的缓存策略
3、采用合理的Session管理机制
4、尽量使用延迟加载特性
5、设定合理的批处理参数
6、如果可能,选用UUID作为主键生成器
7、如果可能,选用基于version的乐观锁策略替代悲观锁
8、开发过程中,打开show_sql,通过观察hibernate生成的sql语句进一步了解实现原理,指定更好的实现策略。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值