浅谈Hibernate框架(一)——.hbm.xml中的配置

Hibernate一枚“全自动”的ORM框架;

用IDE工具集成Hibernate会自动生成:

以.hbm.xml为后缀结尾的配置文件+ POJO类 + Dao类

主键查询:

Session.load(class , id): 失败返回异常

Session.get(class , id): 失败返回null

注:class-运行时类    id-主键

区别:

load()方法可返回实体的代理类实例,而get方法永远直接返回实体类。

load()默认为懒加载,而get不管怎样设置都是立即加载;

级联的设定: cascade

当通过一个表去操作另一个表时,就需要进行所谓级联的设定,即指定cascade属性的取值

Cascade 属性取值范围:

  none:在保存、删除修改对象的时候,不考虑其附属物的操作

   save-update:在保存、更新当前对象时,级联保存、更新附属物。

  delete:在删除当前对象时,级联删除附属物。

  all: 包含save-update和delete的操作  

举个栗子:

      假如customer表和Orders表存在一对多关联:

      那么就需要在Orders表的.hbm.xml中这样配置:

   <set name="orders"      outer-join="true"        cascade="all"

         lazy="false"         batch-size="3"         inverse="true"  >

         <key column="CUSTOMER_ID"/>

         <one-to-many class="com.weikun.po.Orders"/>

</set> 

 扩展解释:

lazy:设置关联级别上的属性,取值:false,true

inverse:关联关系的工作由谁负责,false:默认值,表示由主控方负责;true为被控方负责。

batch-size:批量检索功能,设定批量检索尺寸。

outer-join="true"在关联级别上设置为迫切左外连接检索

constrained:约束

catalog:目录

alias:别名

fetch:  设置"select" 和  "join"

用一对多关系来说明‘select’和‘join’的区别:

fetch = "select"是在查询的时候先查询出一那端的实体,然后在根据一端的查询出多那端的实体,会产生1+n条sql语句;

fetch = "join"是在查询的时候使用外连接进行查询,同时把一端和多端都查询出来了,不会产生1+n的现象。

lazy 和fetch配合使用的问题:

1、当lazy="true" fetch = "select" 的时候 , 这个时候是使用了延迟策略,开始只查询出一端实体,多端的不会查询,只有当用到的时候才会发出sql语句去查询 ;

2、当lazy="false" fetch = "select" 的时候 , 这个时候是使没有用延迟策略,同时查询出一端和多端,同时产生1+n条sql.

3、当lazy="true"/lazy="false" fetch = "join"的时候,自己认为这个时候延迟已经没有什么用了,因为采用的是外连接查询,同时把一端和多端都查询出来了,延迟没有起作用。

如果我引用您的博文记录,没有指出,请求您的原谅。可以私信告诉我,我一定改正! 注:我写博文的目的主要是记录得失,若有什么误人子弟的地方,请多多见谅指正;
原文地址:https://www.cnblogs.com/zhaojinxin/p/6596407.html