Hibernate5的映射文件把一个PO对象与一个表映射起来。每一个表对应一个扩展名为hbm.xml的映射文件。
映射文件需要在hibernate.cfg.xml中注册(mapping),最好与功能相关对象类放在同一目录中,这样修改起来比较方便。
我来举一个例子:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 解析文件的DTD -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 映射文件的根目录 -->
<hibernate-mapping>
<!-- 配置持久化对象与数据库中表的对应关系使用class元素,其中name配置持久化对象对应的类
table配置该持久化对象在数据库中对应的表名,catalog配置表对应的数据库名 -->
<class name="PO.UserInfoPO" table="info" catalog="test">
<id name="id" type="int">
<column name="id"></column>
<generator class="increment"></generator>
</id>
<property name="userName" type="string">
<column name="userName" length="30" not-null="true"></column>
</property>
<property name="password" type="string">
<column name="password" length="30" not-null="true"></column>
</property>
</class>
</hibernate-mapping>
id——定义主键
该元素的常用属性如下所示:
(1)name:持久化类的标识符属性名字。
(2)type:标识持久化类的属性类型。
(3)column:数据库表的主键字段的名字。
(4)access:Hibernate5用来访问属性值的策略。
generator——设置主键生成方式
该元素的作用是指定主键的生成器,通过一个class属性指定生成器对应的类。
Hibernate5提供的内置生成器如下所示:
1)、increment(递增)
increment用于为long、short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用,在集群下不要使用。
2)、identity(标识)
identity为DB2、MySQL、MSSQL Server和Sybase等数据库的内置标识字段提供支持。返回的标识符是long、short或者int类型的。
3)、sequence(序列)
sequence为DB2、Oracle等数据库的内置序列(sequence)提供支持。返回的标识符是long、short或者int类型的。
4)、seqhilo(序列高/低位)
使用一个高/低位算法来高效的生成long、short或者int类型的标识符,需要指定一个数据库sequence的名字。
5)、uuid.hex
使用一个128位的UUID算法生成字符串类型的标识符,在同一网络中是唯一的。UUID被编码为一个32位十六进制的字符串,包含IP地址、JVM的启动时间、系统时间和一个计数器值。
6)、assigned
assigned可让应用系统在执行save()方法之前为对象分配一个标识符。如果需要为应用程序分配一个标识符,可以使用assigned生成器。
7)、foreign
它使用另一个相关对象的标识符,与one-to-one元素一起使用。
property——定义属性
property用于持久化对象的属性与数据库字段之间的映射,包含以下属性:
(1)name:持久化对象的属性名
(2)column:数据库表的字段名
(3)insert:表明用于insert的SQL语句中是否包含这个被映射的字段,默认为true。
(4)update:表明用于update的SQL语句中是否包含这个被映射的字段,默认为true。
(5)lazy:指定实例变量第一次被访问时,这个属性是否延迟抓取,默认为false。
(6)type:Hibernate映射类型的名字。