转自:http://blog.163.com/hzd_love/blog/static/13199988120108265317988/

Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的。该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射。这意味着映射文档是按照持久化类的定义来创建的,而不是表的定义

一、根元素:<hibernate-mapping>,每一个hbm.xml文件都有唯一的一个根元素,包含一些可选的属性

1)package:指定一个包前缀,如果在映射文档中没有指定全限定的类名,就使用这个作为包名,如

<hibernate-mapping package="com.demo.hibernate.beans">

<class name="User" ...>

</hibernate-mapping>

<hibernate-mapping>

<class name="com.demo.hibernate.beans.User" ...>

</hibernate-mapping>

2)schema:数据库schema的名称

3)catalog:数据库catalog的名称

4)default-cascade:默认的级联风格,默认为none

5)default-access:Hibernate用来访问属性的策略

6)default-lazy:指定了未明确注明lazy属性的Java属性和集合类,Hibernate会采取什么样的默认加载风格,默认为true

7)auto-import:指定我们是否可以在查询语言中使用非全限定的类名,默认为true,如果项目中有两个同名的持久化类,则最好在这两个类的对应的映射文件中配置为false

二、<class>定义类:根元素的子元素,用以定义一个持久化类与数据表的映射关系,如下是该元素包含的一些可选的属性

1)name:持久化类(或者接口)的Java全限定名,如果这个属性不存在,则Hibernate将假定这是一个非POJO的实体映射

2)table:对应数据库表名

3)discriminator-value:默认和类名一样,一个用于区分不同的子类的值,在多态行为时使用

4)mutable:表明该类的实例是可变的或者是不可变的

5)schema:覆盖根元素<hibernate-mapping>中指定的schema名字

6)catalog:覆盖根元素<hibernate-mapping>中指定的catalog名字

7)proxy:指定一个接口,在延迟装载时作为代理使用

8)dynamic-update:指定用于UPDATE的SQL将会在运行时动态生成,并且只更新那些改变过的字段

9)dynamic-insert:指定用于INSERT的SQL将会在执行时动态生成,并且只包含那些非空值字段

10)select-before-update:指定HIbernate除非确定对象真正被修改了(如果该值为true),否则不会执行SQL UPDATE操作。在特定场合(实际上,它只在一个瞬时对象关联到一个新的Session中时执行的update()中生效),这说明Hibernate会在UPDATE之前执行一次额外的SQL SELECT操作,来决定是否应该执行UPDATE

11)polymorphism:多态,界定是隐式还是显式的多态查询

12)where:指定定个附加的SQLWHERE条件,在抓取这个类的对象时会增加这个条件

13)persister:指定一个定制的ClassPersister

14)batch-size:指定一个用于根据标识符(identifier)抓取实例时使用的'batch size'(批次抓取数量)

15)optimistic-lock:乐观锁定,决定乐观锁定的策略

16)lazy:通过设置lazy="false",所有的延迟加载(Lazy fetching)功能将未被激活(disabled)

17)entity-name

18)check:这是一个SQL表达式,用于为自动生成的schema添加多行(multi-row)约束检查

19)rowid

20)subselect

21)abstract:用于在<union-subclass>的继承结构(hierarchies)中标识抽象超类

三、<id>定义主键:Hibernate使用OID(对象标识符)来标识对象的唯一性,OID是关系数据库中主键在Java对象模型中的等价物,在运行时,Hibernate根据OID来维持Java对象和数据库表中记录的对应关系

1)name:持久化类的标识属性的名字

2)type:标识Hibernate类型的名字

3)column:数据库表的主键这段的名字

4)unsaved-value:用来标志该实例是刚刚创建的,尚未保存。可以用来区分对象的状态

5)access:Hibernate用来访问属性值的策略

如果表使用联合主键,那么你可以映射类的多个属性为标识符属性。<composite-id>元素接受<key-property>属性映射和<key-many-to-one>属性映射作为子元素:

以下定义了两个字段作为联合主键:

<composite-id>

<key-property name="username" />

<key-property name="password" />

</composite-id>

四、<generator>设置主键生成方式

该元素的作用是指定主键的生成器,通过一个class属性指定生成器对应的类。(通常与<id>元素结合使用)

<id name="id" column="ID" type="integer">

<generator class="native" />--native是Hibernate主键生成器的实现算法之一,由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

</id>

Hibernate提供的内置生成器:

1)assigned算法

2)hilo算法

3)seqhilo算法

4)increment算法

5)identity算法

6)sequence算法

7)native算法

8)uuid.hex算法

9)uuid.string算法

10)foregin算法

11)select算法

五、<property>定义属性

用于持久化类的属性与数据库表字段之间的映射,包含如下属性:

1)name:持久化类的属性名,以小写字母开头

2)column:数据库表的字段名

3)type:Hibernate映射类型的名字

4)update:表明用于UPDATE的SQL语句中是否包含这个被映射的字段,默认为true

5)insert:表明用于INSERT的SQL语句中是否包含这个被映射是否包含这个被映射的字段,默认为true

6)formula:一个SQL表达式,定义了这个计算属性的值

7)access:Hibernate用来访问属性值的策略

8)lazy:指定实例变量第一次被访问时,这个属性是否延迟抓取,默认为false

9)unique:使用DDL为该字段添加唯一的约束,此外,这也可以用做property-ref的目标属性

10)not-null:使用DDL为该字段添加可否为空的约束

11)optimistic-lock:指定这个属性在进行更新时是否需要获得乐观锁定(换句话说,它决定这个属性发生脏数据时版本version的值是否增长)

access属性用来让你控制Hibernate如何在运行时访问属性。默认情况下,Hibernate会使用属性的get/set方法对。如果你指明access="field",则Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。

formula属性是个特别强大的的特征。这些属性应该定义为只读,属性值在装载时计算生成。用一个SQL表达式生成计算的结果,它会在这个实例转载时翻译成一个SQL查询的SELECT子查询语句。如:

<property name="totalPrice" formula="(SELECT SUM(*) FROM user)" />

【转载】Hibernate映射文件详解的更多相关文章

  1. Hibernate映射文件详解(News***.hbm.xml)一

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  2. Hibernate映射文件详解(News***.hbm.xml)二

    转自 http://blog.csdn.net/a9529lty/article/details/6454924 一.hibernate映射文件的作用: Hibernate映射文件是Hibernate ...

  3. Hibernate配置文件和映射文件详解

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  4. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

  5. MyBatis 映射文件详解(六)

    MyBatis 配置文件类型 MyBatis配置文件有两种类型,如下: 全局配置文件(如 mybatis-config.xml) Mapper XML 映射文件(如 UserMapper.xml) 上 ...

  6. hibernate多对多映射文件详解(一)

    1.仓库表属性 public class WarehouseNew implements java.io.Serializable { // Fields private static final l ...

  7. Mybatis学习(三)————— 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  8. Mybatis(三) 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  9. MyBatis的SQL语句映射文件详解

    SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用 < ...

随机推荐

  1. 【机器学习】使用CNN神经网络实现对图片分类识别及模型转换

    仅做记录,后面慢慢整理 训练函数: from skimage import io, transform # skimage模块下的io transform(图像的形变与缩放)模块 import glo ...

  2. 论文阅读笔记(十四)【AAAI2020】:Appearance and Motion Enhancement for Video-based Person Re-identification

    Introduction 本文的贡献:提出了基于视频的行人重识别模型:Appearance and Motion Enhancement Model(AMEM).该模型对两类信息进行提取:提出了App ...

  3. Wannafly Winter Camp 2020 Day 6J K重排列 - dp

    求 \(K\) 是多少个 \(n\) 元置换的周期.\(T\leq 100, n\leq 50, K \leq 10^{18}\) Solution 置换可以被试做若干个环组成的有向图,于是考虑 dp ...

  4. HDU1163 - Eddy's digital Roots

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1163 九余数:一个数除于9所得到的余数,即模9得到的值 求九余数: 求出一个数的各位数字之和,如果是两 ...

  5. ng-辅助操作

    创建组件,指令,过滤器和服务 # 创建组件 ng generate component my-new-component # 创建组件别名 ng g component my-new-componen ...

  6. Android中的消息处理机制

    安卓中的消息处理机制主要涉及到5个概念 (1)消息类:Message,可以理解成一个数据单元: (2)消息队列类:Message Queue,存放通过Hander发布的消息,处理顺序类似于队列,按照先 ...

  7. lvs基础

    lvs类型 lvs-nat: 上下文为masquerade 多目标的DNAT(iptables): 它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发: 特性 ...

  8. F. Moving Points

    https://codeforces.com/contest/1311/problem/F 这是一道线段树类型的题: 可以用权值线段树或者树状数组来解: 所以,我们可以分为两部分,第一部分是计算出到当 ...

  9. PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)

    Excel can sort records according to any column. Now you are supposed to imitate this function. Input ...

  10. 【巨杉数据库SequoiaDB】SequoiaDB 巨杉数据库 v3.4 版本正式发布

    深秋时节,SequoiaDB 巨杉数据库在深秋给大家带来了“一把火”.SequoiaDB v3.4 正式发布啦! 分布式交易场景性能大幅提升 SequoiaDB 巨杉数据库3.4版本正式发布,v3.4 ...