五、Hibernate 配置文件(三) -- 映射文件 (EmpEntity.hbm.xml)

一、***.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">


<!-- 映射文件: 映射一个实体类对象;  描述一个对象最终实现可以直接保存对象数据到数据库中。  -->
<!-- 
	package: 要映射的对象所在的包
	        (可选,如果不指定,此文件所有的类都要指定全路径)
	
	auto-import:默认为true, 在写hql的时候自动导入包名
				如果指定为false, 再写hql的时候必须要写上类的全名;
				  如:session.createQuery("from cn.itcast.c_hbm_config.Employee").list();
 -->
<hibernate-mapping package="cn.itcast.c_hbm_config" auto-import="true">
	
	<!-- 
		class 映射某一个对象的(一般情况,一个对象写一个映射文件,即一个class节点)
			 name 指定要映射的对象的类型
			 table 指定对象对应的表;
				  如果没有指定表名,默认与对象名称一样 
	 -->
	<class name="Employee" table="employee">
		
		<!-- 主键 ,映射-->
		<id name="empId" column="id">
			<!-- 
				主键的生成策略
					identity  自增长(mysql,db2)
					sequence  自增长(序列), oracle中自增长是以序列方法实现
					native  自增长【会根据底层数据库自增长的方式选择identity或sequence】
							如果是mysql数据库, 采用的自增长方式是identity
							如果是oracle数据库, 使用sequence序列的方式实现自增长
					
					increment  自增长(会有并发访问的问题,一般在服务器集群环境使用会存在问题。)
					
					assigned  指定主键生成策略为手动指定主键的值
					uuid      指定uuid随机生成的唯一的值
					foreign   (外键的方式, one-to-one讲)
			 -->
			<generator class="uuid"/>
		</id>
		
		<!-- 
			普通字段映射
			property
				name  指定对象的属性名称
				column 指定对象属性对应的表的字段名称,如果不写默认与对象属性一致。
				length 指定字符的长度, 默认为255
				type   指定映射表的字段的类型,如果不指定会匹配属性的类型
					java类型:     必须写全名
					hibernate类型:  直接写类型,都是小写
		-->
		<property name="empName" column="empName" type="java.lang.String" length="20"></property>
		<property name="workDate" type="java.util.Date"></property>
		<!-- 如果列名称为数据库关键字,需要用反引号或改列名。 -->
		<property name="desc" column="`desc`" type="java.lang.String"></property>
		
	</class>
	

</hibernate-mapping>

二、***.hbm.xml 映射文件详解

	该映射文件用于配置domain实体模型与数据库表的映射。
						实体与表的映射。
						属性与字段的映射。
						类型的映射。
<?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 package="cn.itcast.c_hbm_config" auto-import="true">
	<class name="Employee" table="employee">
		
		<!-- 主键 ,映射-->
		<id name="empId" column="id">
			<generator class="uuid"/>
		</id>
		
		<property name="empName" column="empName" type="java.lang.String" length="20"></property>
		<property name="workDate" type="java.util.Date"></property>
		<!-- 如果列名称为数据库关键字,需要用反引号或改列名。 -->
		<property name="desc" column="`desc`" type="java.lang.String"></property>
		
	</class>
</hibernate-mapping>
2.1 hibernate-mapping 节点
	
	<hibernate-mapping package="cn.itcast.c_hbm_config" auto-import="true">
	
	</hibernate-mapping>

			+++ package: 指定要映射的对象所在的包
			             (可选,如果不指定,此文件所有的类都要指定全路径)
						
						1.指定映射文件所在的包。配置class的name时,不用指定完整路径了。
								<hibernate-mapping package="org.jsoft.demo">	
										<class name="UserEntity" table="USER">		
											<id name="id" column="u_id" ></id>
											<property name="name" column="u_name"></property>
											<property name="birth" column="u_birth"></property>		
										</class>
								</hibernate-mapping>
								
						2.不指定映射文件所在的包。配置class的name时,就需要执行完整路径。
								<hibernate-mapping >	
										<class name="org.jsoft.demoUserEntity" table="USER">		
											<id name="id" column="u_id" ></id>
											<property name="name" column="u_name"></property>
											<property name="birth" column="u_birth"></property>		
										</class>
								</hibernate-mapping>
	
	
			+++ auto-import 默认为true, 在写hql的时候自动导入包名。
							如果指定为false, 再写hql的时候必须要写上类的全名;
					  			如:session.createQuery("from cn.itcast.c_hbm_config.Employee").list();
			


				  			
1.2 class 节点
	<class name="Employee" table="employee">
	</class>
	
			+++ name  要映射的类名。
					  如果package设置了基础包,则name只需设置简单类名。
					  如果package没有设置基础包,则name需设置完整类名。
		
		    +++ table 表名。
		    		         如果没有指定表名,默认为与类名一致(小写)。	
			
			+++ hibernate-mapping节点下可以配置多个class节点。
				即可以配置多个映射关系。
		    	但是在实际开发中,一般一个映射文件配置一个映射。原因:便于维护。
	    	
1.3 property 节点
	
	<property name="empName" column="empName" type="java.lang.String" length="20"></property>
			
			+++ name 指定对象的属性名称
			
			+++ column 指定表的字段的名称。
		    		   如果不指定,默认为与属性名一致
		    		         
			+++ type  指定表的字段的类型。
			          如果不指定,会匹配属性的类型
		    	
					  类型分类:
					  		java类型: 必须写全名(推荐使用)
					  		hibernate类型:直接写类型,都是小写
			

			+++ length 指定字符的长度,默认为255
					  	<property name="empName" column="empName" type="java.lang.String" length="20"></property>  	   
			
			+++ 如果设置表的字段名出现关键字时,可以添加转义字符。
						<!-- 如果列名称为数据库关键字,需要用反引号或改列名。 -->
						<property name="desc" column="`desc`" type="java.lang.String"></property>

三、字段映射


  <property name="desc" column="`desc`" type="java.lang.String"></property>
	
3.1 主键映射

在这里插入图片描述

3.2 Hibernate3映射数据类型

Hibernate3映射数据类型
在这里插入图片描述


	1. 在实际开发中需要在hbm文件中使用的type属性值是指定的类型。那
	    么指定的类型一般的是基于hibernate的类型。
	
	2. 当然在实际过程中也可以在hbm文件中指定java类型。
	
	
	typename 可以是如下几种:

			1.Hibernate 基本类型名
			   (比如:integer, string, character,date, 
			           timestamp, float, binary, serializable, object, blob)。 
		
			2.一个 Java 类的名字,这个类属于一种默认基础类型
			   (比如:int, float,char, java.lang.String, java.util.Date, 
			          java.lang.Integer, java.sql.Clob)3.一个可以序列化的 Java 类的名字。
		
			4.一个自定义类型的类的名字。(比如:com.illflow.type.MyCustomType)。 


	如果你没有指定类型,Hibernarte 会使用反射来得到这个名字的属性,
	以此来猜测正确的 Hibernate 类型。

在这里插入图片描述

3.2 特殊含义字段转义
  <property name="desc" column="`desc`" type="java.lang.String"></property>

	desc在数据库中是关键字,所以不能直接当做字段名,所以需要转义。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值