一、映射配置文件(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 :如果没有表,不会创建表。只会使用数据库中原有的表(校验映射和表结构)