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

<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中的一个



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值