您的位置:首页 > 其它

Hibernate学习(3)------ Hibernate的映射文件

2016-09-22 11:31 232 查看
<hibernate-mapping>

<class name="com.d_hdb_property.User" table="user">
<id name="id" type="int" column="id">
<generator class="native"/>
</id>
<property name="name" type="string" column="name"/>
<property name="gender" type="boolean" column="gender"/>
<property name="birthday" type="date" column="birthday"/>
<property name="desc" type="text" length="5000" column="desc_"/>
<property name="photo" type="binary" column="photo" length="512000"/>

</class>

</hibernate-mapping>


User类如下:

package com.d_hdb_property;

import java.util.Date;

public class User {
private Integer id;
private String name;	//姓名
private boolean gender;	//性别,true表示男性,false表示女性
private Date birthday;	//生日
private String desc;	//一大段文字说明,大概5000字
private byte[] photo;	//照片。二进制文件存储
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean getGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public byte[] getPhoto() {
return photo;
}
public void setPhoto(byte[] photo) {
this.photo = photo;
}

}


1、class标签的参数:

name是对应的类名, table 写的是表名,这里是类和表的对应

2、各属性(property)内参数含义:

(1)name : 对象中的属性名,必须要有

(2)type : 数据的类型

可填写Hibernate 类型,也可填写Java类型,也可以不写,不写的时候自动检测

Hibernate 和Java类型对比如下:



(3)column : 对应数据中的列名,但不可与数据库在中的关键字相同,例如“desc” 需要改成“desc_”,若不写,默认为name 的名字

(4)not-null : true / false 是否有非空约束 , 不写时默认为没有非空约束(false)

(5)length : 长度 (对于数字写长度没有意义,有固定长度),不写时默认为255

属性可以不全写,写几个就在数据库中映射几个属性列

<?xml version="1.0"?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

<class name="com.d_hdb_property.User" table="user">
<id name="id" type="int" column="id">
<generator class="native"/>
</id>
<property name="name" type="string" column="name"/>
<property name="gender" type="boolean" column="gender"/>
</class>

</hibernate-mapping>


将属性删除几个,运行后,查看数据库中表结构



只有id、name和gender三个属性。



还有一种属性的书写方法:

<property name="name" type="string">
<column name="name" not_null="true" length="100"></column>
</property>
效果是一样的。

(5)大文本类型

对于5000字的大文本,有相应的大文本类型,用text类型,如果自动检测会映射出错,而且需要自己指定长度,防止自动设定长度太小



对于图片的二进制文件,用到binary,二进制类型,也是需要指定长度的

3、映射主键

<id>标签中的是指定的主键,其中generator是主键生成策咯,包括以下几种策咯

(1)identity :使用数据库的自动增长,在保存时会忽略手工指定的主键值而而由数据库生成,要求此属性为数字类型

(2)assigned : 手工指定,比如指定uuid,java代码指定

(3)uuid :由Hibernate生成UUID并指定为主键值,要求此属性为string型

(4)hilo :高低位算法生成主键,需要用到一个额外的表,所有数据库都可以使用这个类型,主键类型为数字类型

<generator class="hilo">
<param name="table"> hl_value</param>
<param name="column">next_value</param>
<param name="max_to">100</param>
</generator>




生成了两个表,自己运行测试一下就知道大致用法,这个用的不太多

(5)native :最常用的,会自动选择合适的算法。根据底层数据库的能力选择identity 、sequence或者hilo中的一个
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hibernate SHH 框架
相关文章推荐