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

来源:互联网 发布:手持扫码器软件 编辑:程序博客网 时间:2024/06/06 07:10
<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中的一个



0 0
原创粉丝点击