【Hibernate】基本映射

18 篇文章 2 订阅
13 篇文章 0 订阅
【回顾】
    本篇博客开始,我们将学习的视线转移到“映射”。
【映射定义(Mapping Declaration)】
     对象和关系数据库之间的映射通常是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的, 并且可以手工修改。映射语言是以Java为中心,这意味着映射文档是按照持久化类的定义来创建的, 而非表的定义。
    下面,同样从一个xml文件的代码出发,了解配置中各个标签是怎样的含义,又有着哪些属性。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjpowernode.hibernate">
<!-- table属性重命名;length属性控制字段的长度;access属性持久类中不提供setter方法,则可用field设置 -->  
    <class name="User1" table="t_user1">
        <id name="id" column="user_id" length="32" access="field">
            <generator class="uuid"/>
        </id>
        <property name="name" length="30" unique="true" not-null="true"/>
        <property name="password"/>
        <property name="createTime" type="date" column="create_time"/>
        <property name="expireTime"/>
    </class>
</hibernate-mapping> 
【标签与属性】
    1. hibernate-mapping,此标签的作用是查询到持久化类。
主要属性:
     auto-import (可选 - 默认为 true): 指定我们是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。    
    package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。
      假若有两个持久化类,它们的非全限定名是一样的(就是两个类的名字一样,所在的包不一样),应该设置auto-import="false"。
     我们在代码中写hql语句,从某个实体类去查询,是因为其auto-import属性默认为true。它会找到对应package属性值下的实体类。
    2. class,此标签主要是定义持久化类。
主要属性:
     name (可选): 持久化类(或者接口)的Java全限定名。 如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射。  
     table (可选 - 默认是类的非全限定名): 对应的数据库表名,可以使用该属性重命名表名。
     dynamic-update (可选, 默认为 false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。设置为true,则每次的update语句都不相同,性能就不会像false那样好。  
     dynamic-insert (可选, 默认为 false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。
     lazy (可选): 通过设置lazy="false", 所有的延迟加载(Lazy fetching)功能将被全部禁用(disabled)。
    3. id,定义数据库中的主键字段。
主要属性:
     name (可选): 标识属性的名字。  
     type (可选): 标识Hibernate类型,就像数据类型,如设置为date,time等。
     column (可选 - 默认为属性名): 主键字段的名字。  
     access (可选 - 默认为property): Hibernate用来访问属性值的策略。若在持久类中不提供setter方法,则可设置为field。
    4. generator,主键生成器。
Hibernate提供了很多内置的实现。下面是一些内置生成器的快捷名字:
    increment, 用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。  
    identity, 对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。  
    sequence, 在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
    uuid, 用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
    native, 根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
     assigned, 让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没有指定时的默认生成策略。
     foreign, 使用另外一个相关联的对象的标识符。通常和<one-to-one>联合起来使用。
    5. property,映射普通属性。
主要属性:
      unique (可选): 使用DDL为该字段添加唯一的约束。 同样,允许它作为property-ref引用的目标。
     not-null (可选): 使用DDL为该字段添加可否为空(nullability)的约束。
【总结】
    本篇博客的内容主要是关于映射配置中一些基础的标签和属性,知道了这些,将会在代码的运用中起到很大的帮助作用。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值