2018.11.1 Hibernate中的Mapper关系映射文件

Customer.hbm.xml

基本的参数都在里面了

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
   <!-- 配置表与实体对象的关系 -->
   <!-- package属性:填写一个包名.在元素内部凡是需要书写完整类名的属性,可以直接写简答类名了. -->
<hibernate-mapping package="com.legend.domain" >
	<!-- 
		class元素: 配置实体与表的对应关系的
			name: 完整类名
			table:数据库表名
	 -->
	<class name="Customer" table="cst_customer" >
		<!-- id元素:配置主键映射的属性
				name: 填写主键对应属性名
				column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
				type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
						每个类型有三种填法: java类型|hibernate类型|数据库类型
				not-null(可选):配置该属性(列)是否不能为空. 默认值:false
				length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
		 -->
		<id name="cust_id"  >
			<!-- generator:主键生成策略,就是每条记录录入时,主键的生成规则 
						identify:主键自增,由数据库来维护主键值,录入时不需要指定主键
						increment(了解):主键自增,由hibernate来维护,每次插入钱会先查询表中id最大值+1作为新主键值
						hilo(了解):高低位算法,主键自增,由hibernate来维护开发式不使用
						native:自动三选一策略
						sequence:Oracle中的主键生成策略
			-->
			<generator class="native"></generator>
		</id>
		<!-- property元素:除id之外的普通属性映射
				name: 填写属性名
				column(可选): 填写列名
				type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
						每个类型有三种填法: java类型|hibernate类型|数据库类型
				not-null(可选):配置该属性(列)是否不能为空. 默认值:false
				length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
		 -->
		<property name="cust_name" column="cust_name" >
			<!--  <column name="cust_name" sql-type="varchar" ></column> -->
		</property>
		<property name="cust_source" column="cust_source" ></property>
		<property name="cust_industry" column="cust_industry" ></property>
		<property name="cust_level" column="cust_level" ></property>
		<property name="cust_linkman" column="cust_linkman" ></property>
		<property name="cust_phone" column="cust_phone" ></property>
		<property name="cust_mobile" column="cust_mobile" ></property>
		
		<!-- 集合,一对多关系,在配置文件中配置 -->
		<!-- 
			name 属性:集合属性名
			column属性:外键列名
			class属性:与我关联的对象完整类名		
		 -->
		 <!-- 
			级联操作:cascade
			 		save-update    级联保存更新
			 		delete:级联删除
			 		all:级联更新和级联删除  上面两个
			 		级联操作:简化操作,为了少写两行海代码
		-->
		
		<!-- 
			inverse 属性:配置关系是否维护
				true:customer不维护关系
				false(默认值):customer维护关系
				
				inverse属性:性能优化,提高关系维护的性能提高运行效率
		 
		 		原则:无论怎么放弃,总有一方必须要维护
		 			在一对多关系中:一的一方放弃,也只能一的一方放弃,多的一方不能放弃
		 -->
		 
		 <!-- 
		 		fetch属性:决定加载策略,使用什么类型的sql语句加载集合数据
		 			select(默认):单表查询加载
		 			join:使用多表查询加载集合
		 			subselect:使用自查询加载集合
		 -->
		 <!-- 
		 	lazy属性:决定是否延迟加载
		 		true:延迟加载
		 		false:立即加载
		 		extra:极其懒惰
		 		fetch属性:决定加载策略
		  -->
		    <set name="linkMens" lazy="true" fetch="select">
			<key column="lkm_cust_id"></key>
			<one-to-many class="LinkMan"/>
		</set>
		
		<!--  
		  <set name="linkMens" inverse="true" cascade="save-update">
			<key column="lkm_cust_id"></key>
			<one-to-many class="LinkMan"/>
		</set>
		-->
		<!-- 测试级联删除 -->
		<!--<set name="linkMens" cascade="delete">
			<key column="lkm_cust_id"></key>
			<one-to-many class="LinkMan"/>
		</set>-->
		
	</class>
</hibernate-mapping>

User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
<!-- 配置对象与实体之间的关系 -->    
<hibernate-mapping package="com.legend.domain">
	<!-- 配置数据表 -->
	<class name="User" table="sys_user">
		<!-- 配置主键的生成策略 -->
		<id name="user_id">
			<generator class="native"></generator>
		</id>
		<!-- 配置其他列 -->
		<property name="user_code"></property>
		<property name="user_name"></property>
		<property name="user_password"></property>
		<property name="user_state"></property>
	
		<!-- 配置多对多关系   表达集合属性 -->
		<!-- 
			name属性:集合属性名
			table属性:配置中间表名
			key
				| column:外键,别人饮用我的外键列名
				class:我与那个类是多对多关系
				column:外键,我引用别人的外键列名
		 -->
		 <!-- 
		 	cascade级联操作:
		 		save-update:级联保存更新
		 		delete:级联删除
		 		all:
		 		结论:cascade简化代码书写,该属性使不使用都无所谓
		 				如果使用delete操作太过危险,尤其在多对多中,
		 				建议使用save-update  建议不用手写	
		  -->
		<set name="roles" table="sys_user_role" cascade="save-update">
			<!-- 被引用的外键名字 -->
			<key column="user_id"></key>
			<many-to-many  column="role_id" class="Role"/>
		</set>
	</class>
</hibernate-mapping>

posted @ 2018-11-01 13:36  LegendQi  阅读(1271)  评论(0编辑  收藏  举报