Hibernate之映射文件和主配置文件详解

一、映射配置文件(xxx.hbm.xml)

<hibernate-mapping>  
      <!--   配置表与实体映射关系 -->
	<class name="com.mark.domain.Customer" table="cst_customer">
 
		<!--    建立类中的属性与表中的主键映射	-->
	 	<id name="cust_id" column="custId">
	 	<!--    	主键生成策略			-->
	 		<generator class="native"></generator>
	 	</id>
	 	
	 	<!--    建立类中的普通属性与表中的字段映射	-->
	 	<property name="cust_name" column="custName" ></property>
         

        <!--  组件映射:把多个属性打包在一起当一个属性使用,用来把类的粒度变小。
        <component name="属性,这里指对象">
            <property name="name1"></property>
            <property name="name2"></property>
        </component>-->
          
    <!--<join>:一个对象映射多个表,该元素必须放在所有<property>之后
            <join table="tbl_test:子表名">
                <key column="uuid:子表主键"></key>
            <property name="name1:对象属性" column="name:子表字段"></property>
        </join>-->
	</class>
</hibernate-mapping>

1.hibernate-mapping(根元素,一般不用配置)

(1)schema :指定映射数据库的schema(模式/数据库),如果指定该属性,则表名会自动添加该schema前缀

(2)package :指定包前缀,指定持久化类所在的包名,这样之后class子元素中就不必使用全限定性的类名

(3)default-cascade="none":默认的级联风格,表与表联动

(4)default-lazy="true":默认延迟加载

2.class(类与表映射关系)

(1)name:持久化类的java全限定名

(2)table:对应数据库表名,默认持久化类名作为表名

(3)proxy:指定一个接口,在延迟装载时作为代理使用,也可在这里指定该类自己的名字

(4)mutable:默认为true,设置为false时则不可以被应用程序更新或删除,等价于所有<property>元素的update属性为false,表示整个实例不能被更新

(5)dynamic-insert:默认为false,动态修改那些有改变过的字段,而不用修改所有字段

(6)dynamic-update:默认为false,动态插入非空值字段

(7)select-before-update:默认为false,在修改之前先做一次查询,与用户的值进行对比,有变化都会真正更新

(8)optimistic-lock:默认为version(检查version/timestamp字段),取值:all(检查全部字段)、dirty(只检查修改过的字段)

(9)none(不使用乐观锁定),此参数主要用来处理并发,每条值都有固定且唯一的版本,版本为最新时才能执行操作;如果需要采用继承映射,则class元素下还会增加<subclass.../>元素等用于定义子类

3.id(类中属性与主键映射)

(1)name:类中的属性名

(2)column:表主键字段的名字,如果不填写与name一样

(3)type:指定该标识属性的数据类型,该类型可以是Hibernate的内建类型,也可以是java类型,如果是java类型则需要使用全限定类名(带包名)。该属性可选,如果没有指定类型, 则hibernate自行判断该标识属性数据类型

4.generator(主键生成策略) 

(1)increment:有Hibernat自动以递增的方式生成标识符,每次增量1

(2)identity:由底层数据库生成标识符,前提条件是底层数据库支持自动增长字段类型。(DB2,MYSQL)

(3)uuid:用128位的UUID算法生成字符串类型标识符。

(4)assigned:由java程序负责生成标识符,为了能让java应用程序设置OID,不能把setId()方法设置成private类型。
让应用程序在save()之前为对象分配一个标识符。相当于不指定<generator.../>元素时所采用的默认策略

5.property(类中属性与表普通字段映射)

(1)name:标识属性的名字,以小写字母开头

(2)column:表主键字段的名字,如果不填写与name一样

(3)update/insert:默认为true,表示可以被更新或插入

(4)access:指定Hibernate访问持久化类属性的方式。默认property。property表示使用setter/getter方式,field表示运用java反射机制直接访问类的属性

(5)formula:该属性指定一个SQL表达式,指定该属性的值将根据表达式类计算,计算属性没有和它对应的数据列。formula属性允许包含表达式:sum,average,max函数求值的结果。例如:formula="(select avg(p.price) from Product P)"

6.component ( 组件映射,把多个属性打包在一起当一个属性使用) 

7.join(一个对象映射多个表)

二、映射配置文件(hibernate.cfg.xml)

<hibernate-configuration>
	<session-factory>
	
	<!-- 	必要配置信息:连接数据库的基本信息		 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///crm</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		
		<!--Hibernate的属性  -->
		<!--Hibernate的方言:根据配置的方言生成相应的SQL语句  -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!--Hibernate显示SQL语句  -->
		<property name="hibernate.show_sql">true</property>
		<!--Hibernate格式化SQL语句  -->
		<property name="hibernate.format_sql">true</property>
		
		<!--Hibernate的hbm2ddl(数据库定义语言:create  drop   alter  update .....)  -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<!--Hibernate加载映射  -->
		<mapping resource="com/mark/domain/Customer.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

1.必选属性配置(5个)

(1)hibernate.connection.driver_class(数据库驱动)

(2)hibernate.connection.url(连接数据库url)

(3)hibernate.connection.username(数据库连接用户名)

(4)hibernate.connection.password(数据库连接密码)

(5)hibernate.dialect(数据库方言)

2.可选属性配置(3个)

(1)hibernate.show_sql(控制台显示SQL语句)  

(2)hibernate.format_sql(格式化控制台SQL语句,使之变得更加整洁)

(3)hibernate.hbm2ddl.autoDDL(Hibernate数据库建表语句)

* none             :不使用Hibernate建表语句

* create           :如果数据库中已经有表,删除原有表,重新创建。如果没有表,新建表(测试时使用)

* create-drop  :如果数据库中已经有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表(测试时使用)  

* update          :如果数据库中有表,使用原有表,如果没有表,创建新表(更新表结构)

* validate        :如果没有表,不会创建表。只会使用数据库中原有的表(校验映射和表结构)

3.映射配置文件引入(map  resource)

猜你喜欢

转载自blog.csdn.net/mmake1994/article/details/85674068