Hibernate(2)——hibernate映射文件

hibernate映射文件的作用是完成实体到数据库的双向映射。

为了更好的阐述实体与映射文件的关系,首先建一个实体。

1.创建一个实体类,并且在数据库创建相应的数据表

package com.zy.pojo;
public class Coach {
    private  int id;
    private String name;
    private String detail;
    private  String img;
    private  int age;
    public int getId() {return id;}
    public void setId(int id) {this.id = id;}
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    public String getDetail() {return detail;}
    public void setDetail(String detail) {this.detail = detail;}
    public String getImg() {return img;}
    public void setImg(String img) {this.img = img;}
    public int getAge() {return age;}
    public void setAge(int age) {this.age = age;}
}

所有的持久化类(persistent classes)都要求有无参的构造器,因为 Hibernate 必须使用 Java 反射机制来为你创建对象。构造器(constructor)的访问级别可以是 private,然而当生成运行时代理(runtime proxy)的时候则要求使用至少是 package 级别的访问控制

映射文件

(1)基本结构:

Hibernate 需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是 Hibernate 映射文件发挥作用的地方。映射文件告诉 Hibernate 它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。

映射文件的基本结构:

<?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.zy.pojo">
...
</hibernate-mapping>

其中package属性指的是存放实体类的包,它不是必要的,你可以在后面的class标签上去配置实体的全额限定名。

(2)实体类映射到数据表:

hibernate-mapping 标签(tag)之间, 含有一个 class 元素。所有的持久化实体类(再次声明,或许接下来会有依赖类,就是那些次要的实体,比如学生实体里含有老师信息的实体)都需要一个这样的映射,来把类对象映射到 SQL 数据库里的表:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zy.pojo" >
    <class name="Coach" table="coach">
        ...
    </class>
</hibernate-mapping>

(3)主键生成策略:

前面已经完成了实体类持久化到数据库表里面,现在我们将继续讨论有关唯一标识符属性到数据库表的映射。另外,由于我们不关心怎样处理这个标识符,我们就配置由 Hibernate 的标识符生成策略来产生代理主键字段:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zy.pojo" >
    <class name="Coach" table="coach">
        <id name="id" type="int" column="id">
            <generator class="native"/>
        </id>
         ....
    </class>
</hibernate-mapping>

id 元素是对 identifier 属性的声明。name="id" 映射属性声明了 JavaBean 属性的名称并告诉 Hibernate 使用 getId()setId() 方法来访问这个属性。column 属性告诉 Hibernate 数据库Coach 表的哪个字段持有主键值。

嵌套的 generator 元素指定标识符的生成策略(也就是标识符值是怎么产生的)。

generator元素的class属性取值详解:

取值说明
identity用于MySql数据库。特点:递增。
sequence用于Oracle数据库。
native跨数据库时使用,由底层方言产生。
hilo通过高低位合成id,先建表hi_value,再建列next_value。必须要有初始值。
sequencehilo同过高低位合成id,建一个sequence序列,不用建表。
assigned用户自定义id。
foreign用于一对一关系共享主健时,两id值一样。

(4)持久化属性声明

默认情况下,类里面的属性都被视为非持久化的。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zy.pojo" >
    <class name="Coach" table="coach">
        <id name="id" type="int" column="id">
            <generator class="native"/>
        </id>
        <property name="name" column="name" type="string"/>
        <property name="detail" column="detail" type="string"/>
        <property name="img" column="img" type="string"/>
        <property name="age" column="age" type="int"/>
    </class>
</hibernate-mapping>

property标签的属性详细清单:

<property>标签属性: 
(1)name: 属性的名字,以小写字母开头。  
(2)column:可选 ,对应的数据库字段名。默认为属性名字。 也可以通过嵌套的<column>元素指定。
(3)type:可选,属性的类型。可以是hibernate的类型,也可以是java类型,若是配置成java类型,则需要使用全限定类名。 
(4)unique:可选,使用DDL为该字段添加唯一的约束。 同样,允许它作为property-ref引用的目标。
(5)not-null: 可选,使用DDL为该字段添加可否为空(nullability)的约束。
(6)length:指定该属性映射的数据列的长度。

(5) 映射类型

property标签还有一个type属性,它用于映射类型,它们能把 Java 数据类型转换到 SQL 数据类型,具体的后面讲述。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值