- 我们在使用Hibernate时,书写了一个User类,这个类我们称为JavaBean
- JavaBean可以简单的理解成提供私有属性,并提供私有属性的get/set方法
- POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans
- 我们也称为模型,在Hibernate中,又称这种类为实体,因为是与表关联的
编写规则 |
|
使用包装类型的话则没有默认值,不赋值的话为空 那么数据库中存的信息就为null,如果是基本类型 比如Int默认就为0
持久化对象的唯一标识 OID
- Java按地址区分同一个类的不同对象.l
- 关系数据库用主键区分同一条记录l
- Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系结论: 对象的OID和数据库的表的主键对应。
- 为保证OID的唯一性,应该让Hibernate来为OID赋值
区分自然主键和代理主键
- 主键需要具备: 不为空/不能重复/不能改变
- 自然主键: 在业务中,某个属性符合主键的三个要求.那么该属性可以作为主键列.【登录名可以是自然主键】
- 代理主键: 在业务中,不存符合以上3个条件的属性,那么就增加一个没有意义的列.作为主键. 比如所有属性都不满足条件 那么我们创建一个属性ID来作为代理主键
基本数据与包装类型l
- 基本数据类型和包装类型对应hibernate的映射类型相同l
- 基本类型无法表达null、数字类型的默认值为0。
- 包装类默认值是null。当对于默认值有业务意义的时候需要使用包装类。
主键的生成策略【重要】
<id name="uid" column="id">
|
increment就是每次存储之前 Hibernate都去数据库中查一下最大的ID 然后再设置ID存进去 ,有并发问题
将属性设置为UUID之后并且将属性设置为String之后 , 结果显示为为这样。
手动设置ID属性
修改属性之后然后就要求我们每次手动存储ID 这段代码表示 我们生成一段代码并且去掉-
映射文件的配置
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.gyf.hibernate.domain.User" table="t_user">
<!-- 1、主键,如果属性与表字段不一至,要指定column -->
<id name="uid" column="id">
<!-- 主键生成策略 -->
<generator class="native"></generator>
</id>
<!-- 2、用户字段 -->
<property name="username"></property>
<property name="password"></property>
</class>
</hibernate-mapping>