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

时间:2021-12-14 09:05:25

Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架。

我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图:

其中PO=POJO+映射文件

根据体系结构视图可以了解到整个利用Hibernate框架实现的项目包括整个重要的配置文件:

Hibernate配置文件:实现Hibernate基础配置,是Hibernate能够友好的与DB进行交互基础;

开发时放置src目录下,取名为:hibernate.cfg.xml(hibernate.properties)

Hibernate映射文件:实现POJO与DB表格的映射配置;

为了维护方便一般将其放置和相对应的POJO同一目录下,取名为POJOName.hbm.xml。虽然一个映射文件中可以配置多个POJO与数据库表的映射关系但是还是建议一个映射文件中只配置一个POJO与数据库表的映射关系。

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)" />

如:

<!-- 映射派生属性 -->

<property name="desc" formula="(SELECT guang(author,":",title) FROM NEWS where NEWS.id=id></property>

Hibernate映射文件详解(News***.hbm.xml)一的更多相关文章

  1. Hibernate映射文件详解&lpar;News&ast;&ast;&ast;&period;hbm&period;xml&rpar;二

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

  2. 【转载】Hibernate映射文件详解

    转自:http://blog.163.com/hzd_love/blog/static/13199988120108265317988/ Hibernate的持久化类和关系数据库之间的映射通常是用一个 ...

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

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

  4. Mybatis SQL映射文件详解

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

  5. MyBatis 映射文件详解&lpar;六)

    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语句映射文件详解

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

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

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

  9. Mybatis&lpar;三&rpar; 映射文件详解

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

随机推荐

  1. Fiddler测试WebApi的Post方法报错

    标题头要加 Content-Type: application/json,Request Body中写json数组.

  2. &dollar;使用dom4j可解析 返回&amp&semi;&num;x等字样的 html转义字符

    如果以GET或POST请求某个系统返回,带有 $#x 那很有可能是axis服务器返回的. <?xml version="1.0" encoding="UTF-8&q ...

  3. 将特定TD颜色改变的两种方法

    方法一:取table值 方法二:使用tbody  

  4. Ubuntu 12&period;04 LTS 及ubuntu14&period;10 -- NFS安装

    在Linux 服务器上配置好NFS 根文件系统后,在单板侧挂载NFS 文件系统,具体操作如下:ifconfig eth0 hw ether 00:10:85:18:01:84 /*配置MAC地址*/i ...

  5. http header详解

    HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模 型,浏览器或其他客户端发出请求,服务器给与响应.就整个网络资源 ...

  6. lintcode:Palindrome Partitioning 分割回文串

    题目: 分割回文串 给定一个字符串s,将s分割成一些子串,使每个子串都是回文串. 返回s所有可能的回文串分割方案. 样例 给出 s = "aab",返回 [ ["aa&q ...

  7. SQL注入 手注与联合注入

    SQL注入,吧sql命令插入到WEB表单,或输入域名或页面亲求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令:            得到数据库用户名和密码 1:在以,{ .asp?id=32( ...

  8. PowerShell在激活virtualenv虚拟环境时禁止运行的脚本的解决办法

    问题描述 在使用Django开发网站项目时,为了便于修改.维护以及项目部署,使用了virtualenv虚拟环境.这个工具允许你维护多个分离的Python环境,每个都具有它自己的库和包的命名空间.这种情 ...

  9. Linux之正则表达式1

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑.适当使用正则表达式可以提高工作效 ...

  10. OpenCV几种访问cv&colon;&colon;Mat数据的方法

    一般来说,如果是遍历数据的话用指针ptr比用at要快.特别是在debug版本下.因为debug中,OpenCV会对at中的坐标检查是否有溢出,这是非常耗时的. 代码如下 #include <op ...