持久化类与对应映射
使用Hibernate进行的操作时针对对象的,所谓对象,就是该表所对应的持久化类的实例
持久化类中的属性应该与数据库表中的字段相匹配
持久化类的4条编程风格:
1、必须含有一个默认的无参构造方法,以便Hibernate通过Constructor.newInstance()实例化持久化类
2、提供一个标志属性(可选)
标志属性一般映射的是数据库中的主键字段,例如User中的属性id,建议在持久化类中添加一致的标志属性
3、使用非final类(可选)
因为如果使用的持久化类是final类,就不能使用代理来延迟关联加载
4、为属性声明访问器(可选)
持久化类的属性不能声明为public的,最好使用private的set()和get()方法对属性进行持久化
hibernate映射
hibernate的核心就是对象关系映射对象和关系数据库之间的映射一般是通过xml文档来实现的。映射文件命名规则为*.hbm.xml
映射文件一般放在所对应的持久化类的统一包下
hibernate映射配置主要分为主键配置和其他列配置,主键使用<id>元素,一般列使用<property>元素
demo:
<?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"> <hibernate-mapping> <class name="com.hibernate.bean.Student" table="STUDENT"> <id name="id" type="java.lang.Integer"><!--主键策略--> <column name="ID" />
<generator class="native" /> <!--如果主键不是自动生成,这个属性最好不要写,native表示系统自动选择使用identity、sequence或hillo自动生成标识列--> </id> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <property name="description" type="java.lang.String"> <column name="DESCRIPTION" /> </property> </class> </hibernate-mapping>
主键的时候会出现一种特殊情况,就是数据表中的主键为联合主键。
那么你可以使用映射类的额多个属性为标志属性.<composite-id>接受<key-property>属性映射和<key-many-to-one>属性映射作为子元素。
例如:
<composition-id> <key-property name="username"/> <key-property name="password"/> <!--如果property元素中没有声明column属性,默认数据库表中的column属性与这里的name属性相等--> </composition-id>
持久化类映射文件<property>元素的常用配置属性:
name | 持久化类属性的名称,以小写字母开头 |
column | 数据库字段名 |
type | 数据库字段类型 |
length | 数据库字段定义的长度 |
not-null | 该数据库字段是否不允许为空 |
unique | 该数据库字段是否唯一 |
lazy | 是否延迟加载 |
<id>元素的子元素<generator>是一个java类的名字用来为持久化类的名字生成唯一的标志映射数据库中的主键字段。通过设置<genrator>元素的属性设置hibernate的主键生成策略,主要的内置属性如下:
increment | 用于为Long、Short、int类型生成唯一标识。在集群下不要使用该属性 |
identity | 由底层数据生成主键,前提是底层数据支持自增字段类型 |
sequence | 根据底层数据的序列生成主键,前提是底层数据库支持序列 |
hillo | 根据高/低算法生成把特定的表作为高位值来源,在默认情况下选用hibernate_unique_key表的next_hi字段 |
native | 根据底层数据库对自动生成标识符的支持能力自动选择identity或者sequence或者hillo |
assigned | 由程序负责主键的生成,此时持久化类的唯一标识不能为private类型 |
selected | 通过数据库触发器生成主键 |
foreign | 使用另一个关联对象的标识符,通常和<one-to-one>一起使用 |
关于持久化类与映射与hibernate操作:
测试demo:
这里将id改成了ip
持久化类加了ip属性以及对应封装方法
在测试类中进行查询操作
得到结果:
结论:
hibernate是针对持久化类的操作,持久化类通过映射文件与数据库进行对应。
数据库与持久化类的一一对应在hmp文件下的class标签中的peoperty或者id标签中的name和column属性,与持久化类属性名以及对应方法无关。