您的位置:首页 > 其它

Hibernate-helloworld-2 hbm.xml配置及其属性说明

2018-03-23 14:37 429 查看
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- hbm.xml文件与描述类存放在同一个文件夹下
四部分配置:
(1)类和表的映射
(2)主键的映射
(3)类的属性和DB中字段的映射
(4)关系的映射     -->

<!--
hbm.xml (hibernate-mapping元素配置)根元素配置
<hibernate-mapping
schema  = "schemaName"  为表限定数据库名称
catalog = "catalogName"  mysql不支持
default-cascade = "cascade_style"  Hibernate用来访问所有属性的策略
default-access  = "field propertyly ClassName"
default-lazy    = "true/false"  默认为true
auto-import     = "true/false"  默认为true,指定我们是否可以在查询语言中使用非 全限定的类名
package         = "package.name" 指定一个包前缀,如果在映射文档中没有指定全限定的类 名, 就使用这个作为包名。
>
</hibernate-mapping>

(class)元素配置
<class
name = "ClassName"  需要被映射的java对象
table = "tableName"  被映射的表的表明
></class>

(id)元素配置  java对象的成员属性对应 表中的primary key
<id
name   = "propertyName"  标识属性的名字
type   = "typeName"      标识hibernate类型的名字
column = "columnName"    主键字段的名字
unsaved-value = "null | any | none | undefined | id_value"
一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。但在h4h后不再需要。
access = "field property ClassName"  hibernate用来访问属性值的策略
>
<generator class = "generatorClass">
</id>

关于type,既不是java的类型,也不是数据库的类型。而是hibernate提供的内建类型。
1.  interger, long, short, float, double ,character, byte 对应java基础类型
2.  boolean,yes_no, true_false ->java中的boolean
3.  string    -> java.lang.String
4.  date, time, timestamp  (java中的 java.util.Date,  SQL中date,time,timestamp)
5.  calendar。 calendar_date (java中的java.util.Calender, SQL中timestam,date)
6.  big_decimal, big_integer ( java中java.math.bigDecimal, SQL中numeric )
7.  local. timezone, currency
8.  class  ( java.lang.Class , SQL中 varchar  )
9.  binary ( java中 字节数组,   SQL二进制类型  字节流数据 )
10. text  ( java字符串 ,   SQL中的clob,text 字符型数据 )
11。 clob, blob  对应java中的 java.sql.Clob, java.sql.Blob

<id>的子元素 <generator>是一个java类的名字,用来为该持久化类的实例生成唯一标识。
如果这个生成器实例需要某些配置值或者初始化参数,使用<param>元素来传递。
<id  name="id" type
4000
="long" column="person_id">
<generator class="sequence">
<param name="sequence"> person_id_sequence </param>
</generator>
</id>

<generator>实例生成器  class="..."指定Hibernate的内置生成器。
1. increment
用于为long, short或者 int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。
在集群下不要使用。

2. identity 返回的表示符是 long,short, int类型。

3. sequence

4. seqhilo, uuid, guid, native, assigned, select, foregn

(property)元素配置
<property
name   = "propertyName"  //java对象的属性名称
type   = "typename"      //type 字段的类型
column = "columnName"    //column 表中字段名字
update = "true / false"
insert = "true / false"
formula
access
lazy
unique
not-null
optimistic-lock  true/false
generated
>
</property>

update/insert 用于update,insert的SQL语句中是否包含这个被映射了的字段。
formula:  一个SQL表达式,定义了这个计算属性的值,相当于子查询。
access:   Hibernate访问属性值的策略。默认情况下是getter,setter.如果设置
access="field",那么Hibernate直接使用反射来访问成员变量。
lazy  :  是否延迟抓取该属性
unique:    为该字段添加唯一的约束。
not-null:  添加不为null的约束
optimistic-lock : 指定这个属性在做更新是是否需要获得乐观锁。即这个属性发生脏数据时。
版本的值是否增长。
generated:  默认值never,表明此属性值是否由数据库生成
-->

<!-- 1.设置包名  -->
<hibernate-mapping  package="user">
<!-- 2.设置要映射的类名name,与表名table -->
<class name="cn.zm.dao.UserAccount" table="test">
<!--    3.设置主键name,类型type ,对应表中字段column (不写则默认相同) -->
<id name="uuid" type="java.lang.String">
<!--        4.主键生成策略     class -->
<generator class="assigned"></generator>
</id>
<!--        5.普通属性的映射 name属性名,type类型,column对应表中的字段名 -->
<property name="userId"></property>
<property name="name"></property>
<property name="age"></property>
</class>
</hibernate-mapping>

<!-- property中常用属性
1. name :  对应java类的属性名称
2. column: 对应的表中的字段
3. type:   属性的类型 int ,string等
4. not-null: 设置该属性是否为空,为true时表示非空,默认是false
5. length  字段的长度限制 -->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: