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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM