Hibernate 学习的书-夏昕(3)

Hibernate基础语义

Configuration
正如其名,Configuration 类负责管理Hibernate 的配置信息。

 

SessionFactory
SessionFactory 负责创建Session 实例。

 

Session
Session是持久层操作的基础,相当于JDBC中的Connection。

 

XDoclet 与Hibernate 映射
在POJO 中融合XDoclet 的映射文件自动生成机制,提供了除手动编码和由数据库导出
基础代码的第三种选择。

 

XDoclet实现基本原理是,通过在Java代码加入特定的JavaDoc tag,从而为其添加特定
的附加语义,之后通过XDoclet工具对代码中JavaDoc Tag进行分析,自动生成与代码对应
的配置文件,XDoclet。

 

 

数据检索

Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。

Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));

 

这里的criteria 实例实际上是SQL “Select * from t_user where
name=’Erica’ and sex=1”的封装。

 

Hibernate Query Language (HQL)
Criteria提供了更加符合面向对象编程模式的查询封装模式。不过,HQL(Hibernate
Query Lang

 

String hql = "from org.hibernate.sample.TUser";
Query query = session.createQuery(hql);
List userList = query.list();

 

HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分。

 

数据关联


一对一关联
配置:
Hibernate中的一对一关联由“one-to-one”节点定义。在*.hbm.xml 里边定义。

 

一对多关联
一对多关系在系统实现中也很常见。典型的例子就是父亲与孩子的关系。一对多关系分为单向一对多关系和双向一对多关系。
单向一对多关系只需在“一”方进行配置,双向一对多关系需要在关联双方均加以配置。

 

 

内容很杂,需要仔细看。。

 

数据访问
PO和VO
PO即 Persistence Object
VO即 Value Object
PO和VO是Hibernate中两个比较关键的概念。
首先,何谓VO,很简单,VO就是一个简单的值对象。

 

"

TUser user = new TUser();
user.setName("Emma");

"

这里的user就是一个VO。VO只是简单携带了对象的一些属性信息。

 

何谓PO? 即纳入Hibernate管理框架中的VO。

 

VO和PO的主要区别在于:
Ø VO是独立的Java Object。
Ø PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数
据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实
际数据库中。
如果一个PO与Session对应的实体容器中分离(如Session关闭后的PO),那么
此时,它又会变成一个VO。

 

关于unsaved-value
在非显示数据保存时,Hibernate将根据这个值来判断对象是否需要保存。
所谓显式保存,是指代码中明确调用session 的save、update、saveOrupdate方
法对对象进行持久化。如:
session.save(user);
而在某些情况下,如映射关系中,Hibernate 根据级联(Cascade)关系对联接类进
行保存。此时代码中没有针对级联对象的显示保存语句,需要Hibernate 根据对象当前状
态判断是否需要保存到数据库。此时,Hibernate即将根据unsaved-value进行判定。

 

Inverse和Cascade
Inverse,直译为“反转”。在Hibernate语义中,Inverse指定了关联关系中的
方向。
关联关系中,inverse=”false”的为主动方,由主动方负责维护关联关系。具体可
参见一对多关系中的描述。
而Cascade,译为“级联”,表明对象的级联关系,如TUser的Cascade设为all,
就表明如果发生对user对象的操作,需要对user所关联的对象也进行同样的操作。如对
user对象执行save操作,则必须对user对象相关联的address也执行save操作。
初学者常常混淆inverse和cascade,实际上,这是两个互不相关的概念。Inverse
指的是关联关系的控制方向,而cascade指的是层级之间的连锁操作。

 

延迟加载(Lazy Loading)

 

所谓延迟加载,就是在需要数据的时候,才真正执行数据加载操作。

 

"

lazy="true"

"

 

事务管理
Hibernate 是JDBC 的轻量级封装,本身并不具备事务管理能力。在事务管理层,
Hibernate将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。
Hibernate的默认事务处理机制基于JDBC Transaction。我们也可以通过配置文
件设定采用JTA作为事务管理实

 

锁(locking)
业务逻辑的实现过程中,往往需要保证数据访问的排他性

Hibernate支持两种锁机制:即通常所说的“悲观锁(Pessimistic Locking)”
和“乐观锁(Optimistic Locking)”。

 

悲观锁(Pessimistic Locking)
悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自
外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定
状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能
真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系
统不会修改数据)。

 

乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本
(Version)记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于
数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来
实现。
读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提
交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据
版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

 

"

optimistic-lock="version"

 

"

Hibernate分页
数据分页显示,在系统实现中往往带来了较大的工作量,对于基于JDBC的程序而言,
不同数据库提供的分页(部分读取)模式往往各不相同,也带来了数据库间可移植性上的
问题。
Hibernate中,通过对不同数据库的统一接口设计,实现了透明化、通用化的分页实
现机制。

 

Cache管理
Cache往往是提高系统性能的最重要的手段。

Hibernate中的Cache大致分为两层,第一层Cache在Session实现,属于事务
级数据缓冲,一旦事务结束,这个Cache 也就失效。此层Cache 为内置实现,无需我们
2 DOS下的磁盘读写缓冲程序
Hibernate Developer’s Guide Version 1.0
September 2, 2004 So many open source projects. Why not Open your Documents?
进行干涉。
第二层Cache,是Hibernate 中对其实例范围内的数据进行缓存的管理容器。也是
这里我们讨论的主题。

 

Session管理

大多数情况下,Session 管理的目标聚焦于通过合理的设计,避免Session 的频繁创建
和销毁,从而避免大量的内存开销和频繁的JVM垃圾回收,保证系统高效平滑运行。
在各种Session 管理方案中, ThreadLocal 模式得到了大量使用。ThreadLocal 是
Java中一种较为特殊的线程绑定机制。通过ThreadLocal存取的数据,总是与当前线程相关,
也就是说,JVM 为每个运行的线程,绑定了私有的本地实例存取空间,从而为多线程环境常出
现的并发访问问题提供了一种隔离机制。

 

后边需要再消化。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值