zoukankan      html  css  js  c++  java
  • 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>
    
    
  • 相关阅读:
    webserivice---通过Ajax访问远程天气预报服务
    IDEA Error:java: 未结束的字符串文字
    UML:它是一种支持模型化和软件系统开发的图形化语言
    核心代码之分页
    struts.xml 的 file 报错 解决方式
    Myeclipse buildpath 加server lib (server runtime)
    核心代码之优化查询
    入园新编
    为啥JS中判断对象是否是类的实例推荐使用instanceof而不推荐constructor
    http常考的题目
  • 原文地址:https://www.cnblogs.com/qichunlin/p/9973656.html
Copyright © 2011-2022 走看看