1.1 编写规则
• 提供一个无参数 public访问控制符的构造器【能让Hibernate用反射来封装返回对象】
• 提供一个标识属性,映射数据表主键字段 【Hibernate标识对象的唯一依据就是id】
• 所有属性提供public访问控制符的 set get 方法(JavaBean)【属性是来自Javabean的,成员变量拥有了get set方法才能被称为属性】
• 标识属性应尽量使用基本数据类型的包装类型【包装相比基本数据类型操作起来省事。】
• 不要用final修饰实体 (将无法生成代理对象进行优化)
1.2 持久化对象的唯一标识 OID
1、Java按地址区分同一个类的不同对象.
2、关系数据库用主键区分同一条记录
3、 Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系
结论: 对象的OID和数据库的表的主键对应。为保证OID的唯一性,应该让Hibernate来为OID赋值【而不是手动给OID赋值】
1.3 区分自然主键和代理主键
主键需要具备:不为空/不能重复/不能改变【主键是不能被修改的!!】
自然主键: 在业务中,某个属性符合主键的三个要求.那么该属性可以作为主键列.
代理主键: 在业务中,不存符合以上3个条件的属性,那么就增加一个没有意义的列.作为主键.
1.4 基本数据与包装类型
基本数据类型和包装类型对应hibernate的映射类型相同
基本类型无法表达null、数字类型的默认值为0。
包装类默认值是null。当对于默认值有业务意义的时候需要使用包装类。
1.5 普通属性
分析:User.hbm.xml文件:ORM元数据→表对象关系映射文件
1、package属性:配上包名,下面的class name就不必写全路径名称了。
2、class属性:类与表的对应。
3、dynamic-insert属性:动态插入。默认值是false。如果对象的某一个值没有设置,又不想把默认值插入到数据库(浪费资源),这时候把属性设置为true,就只插入有值的字段。【一般开发的时候不太用,提高的效率有限。】
4、dynamic-update:动态刷新。只update有改动的地方,可以提高性能。
1.6 主键
主键生成策略:可供选择的有7个策略。
1.increment 数据库自己生成主键. 先从数据库中查询最大的ID值,将ID值加1作为新的主键
2.identity 依赖于数据的主键自增功能
3.sequence 序列,依赖于数据中的序列功能(Oracle).
4.hilo(纯了解,永远用不到) : Hibernate自己实现序列的算法,自己生成主键. (hilo算法 )
5.native 自动根据数据库判断,三选一. identity|sequence|hilo
6.uuid 生成32位的不重复随机字符串当做主键【使用uuid生成算法】【使用这个uuid,还得把表的id改成String类型。】
7.assigned 自己指定主键值. 表的主键是自然主键时使用.