eclipse学习(第三章:ssh中的Hibernate)——4.Hibernate中的映射文件及映射类型

eclipse学习(第三章:ssh中的Hibernate)——4.Hibernate中的映射文件及映射类型

前言

本文参考自https://www.w3cschool.cn/hibernate/1vlx1iej.html后做的笔记。

映射文件

一个对象/关系型映射一般定义在 XML 文件中。映射文件指示 Hibernate 如何将已经定义的类或类组与数据库中的表对应起来。
尽管有些 Hibernate 用户选择手写 XML 文件,但是有很多工具可以用来给先进的 Hibernate 用户生成映射文件。这样的工具包括 XDoclet, Middlegen 和 AndroMDA

映射示例

创建Teacher类

package com.czx.mapping;

public class Teacher {
	
	private Integer id;
	
	private String name;
	
	private String subject;
	
	private String favoriteFood;
	
	private Double height;

	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 String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getFavoriteFood() {
		return favoriteFood;
	}

	public void setFavoriteFood(String favoriteFood) {
		this.favoriteFood = favoriteFood;
	}

	public Double getHeight() {
		return height;
	}

	public void setHeight(Double height) {
		this.height = height;
	}

	public Teacher(Integer id, String name, String subject, String favoriteFood, Double height) {
		this.id = id;
		this.name = name;
		this.subject = subject;
		this.favoriteFood = favoriteFood;
		this.height = height;
	}

	public Teacher() {
	}

	
}

对应的数据库表结构

eclipse学习(第三章:ssh中的Hibernate)——4.Hibernate中的映射文件及映射类型

创建一个Teacher.hbm.xml

这个主要是用来将已定义的类或类组与数据库表匹配。
而且这个名称是有定义规则的。

<?xml version="1.0"?>
<!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="Teacher" table="teacher">
		<meta attribute="class-description">
			一个Teacher类的描述
		</meta>
		
		<id name="id" column="id" type="integer">
			<generator class="native"></generator>
		</id>
		
		<property name="name" column="name" type="string"></property>
		<property name="subject" column="subject" type="string"></property>
		<property name="favoriteFood" column="favorite_food" type="string"></property>
		<property name="height" column="height" type="double"></property>
	</class>

</hibernate-mapping>	

映射关系

原始类型

映射类型 Java 类型 ANSI SQL 类型
integer int 或 java.lang.Integer INTEGER
long long 或 java.lang.Long BIGINT
short short 或 java.lang.Short SMALLINT
float float 或 java.lang.Float FLOAT
double double 或 java.lang.Double DOUBLE
big_decimal java.math.BigDecimal NUMERIC
character java.lang.String CHAR(1)
string java.lang.String VARCHAR
byte byte 或 java.lang.Byte TINYINT
boolean boolean 或 java.lang.Boolean BIT
yes/no boolean 或 java.lang.Boolean CHAR(1)(‘Y’ or ‘N’)
true/false boolean 或 java.lang.Boolean CHAR(1) (‘T’ or ‘F’)

日期和时间类型

映射类型 Java 类型 ANSI SQL 类型
date java.util.Date 或 java.sql.Date DATE
time java.util.Date 或 java.sql.Time TIME
timestamp java.util.Date 或 java.sql.Timestamp TIMESTAMP
calendar java.util.Calendar TIMESTAMP
calendar_date java.util.Calendar DATE

二进制和大型数据对象

映射类型 Java 类型 ANSI SQL 类型
binary byte[] VARBINARY (or BLOB)
text java.lang.String CLOB
serializable any Java class that implements java.io.Serializable VARBINARY (or BLOB)
clob java.sql.Clob CLOB
blob java.sql.Blob BLOB

JDK 相关类型

映射类型 Java 类型 ANSI SQL 类型
class java.lang.Class VARCHAR
locale java.util.Locale VARCHAR
timezone java.util.TimeZone VARCHAR
currency java.util.Currency VARCHAR

如果你想了解更多的映射

请去以下网站下载
hibernate4及以上的jar包http://hibernate.org/orm/releases/

hibernate3的相关jar包下载地址
https://sourceforge.net/projects/hibernate/files/hibernate3/

解压缩后可以去找里面的映射文件,名为
Mapping.hbm.xml,不同版本会有不一样的,这里我以单个为例,其实很多时候我们写的那些xml配置文件顶部的内容都是从这里拿的

<?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 package="org.hibernate.test.collection.custom.parameterized" default-access="field">

    <typedef name="DefaultableList" class="org.hibernate.test.collection.custom.parameterized.DefaultableListType">
        <param name="default">Hello</param>
    </typedef>

    <class name="Entity">
        <id name="name" type="string"/>
        <list name="values" fetch="join" table="ENT_VAL" collection-type="DefaultableList">
            <key column="ENT_ID"/>
            <list-index column="POS"/>
            <element type="string" column="VAL"/>
        </list>
    </class>

</hibernate-mapping>
上一篇:Hibernate-V 在其他项目中加入 Hibernate


下一篇:eclipse学习(第三章:ssh中的Hibernate)——6.Hibernate中O/R 映射