1、实体 编写规则

  • 提供一个无参数 public访问控制符的构造器
  • 提供一个标识属性,映射数据表主键字段,hibernate以id识别,必须有主键
  • 所有属性提供public访问控制符的 set  get 方法(javaBean)
  • 标识属性应尽量使用基本数据类型的包装类型(能用integer不使用int)
  • 不要用final修饰实体 (将无法生成代理对象进行优化

2、 持久化对象的唯一标识 OID

1 Java按地址区分同一个类的不同对象.

2  关系数据库用主键区分同一条记录

3  Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系

结论: 对象的OID和数据库的表的主键对应。为保证OID的唯一性,应该让Hibernate来为OID赋值

3、 区分自然主键和代理主键

主键需要具备: 不为空/不能重复/不能改变

自然主键:      在业务中,某个属性符合主键的三个要求.那么该属性可以作为主键列.

代理主键:     在业务中,不存符合以上3个条件的属性,那么就增加一个没有意义的列.作为主键.

4、  基本数据与包装类型

1  基本数据类型和包装类型对应hibernate的映射类型相同

2 基本类型无法表达null、数字类型的默认值为0。

3  包装类默认值是null。当对于默认值有业务意义的时候需要使用包装类。

5、 普通属性

<hibernate-mapping>
package 用于配置PO类所在包
例如: package="com.itheima.d_hbm"
<class> 配置 PO类 和 表 之间对应关系
name:PO类全限定类名
例如:name="com.itheima.d_hbm.Person"
如果配置 package,name的取值可以是简单类名 name="Person"
table : 数据库对应的表名
dynamic-insert="false" 是否支持动态生成insert语句
dynamic-update="false" 是否支持动态生成update语句
如果设置true,hibernate底层将判断提供数据是否为null,如果为null,insert或update语句将没有此项。
普通字段
<property>
name : PO类的属性
column : 表中的列名,默认name的值相同
type:表中列的类型。默认hibernate自己通过getter获得类型,一般情况不用设置
取值1: hibernate类型
string 字符串
integer 整形
取值2: java类型 (全限定类名)
java.lang.String 字符串
取值3:数据库类型
varchar(长度) 字符串
int 整形
<property name="birthday">
<column name="birthday" sql-type="datetime"></column>
</property>
javabean 一般使用类型 java.util.Date
jdbc规范提供3中
java类型 mysql类型
java.sql.Date date
java.sql.time time
java.sql.timestamp timestamp
null datetime 以上三个类型都是java.util.Date子类 length : 列的长度。默认值:255
not-null : 是否为null
unique : 是否唯一
access:设置映射使用PO类属性或字段
property : 使用PO类属性,必须提供setter、getter方法
field : 使用PO类字段,一般很少使用。
insert 生成insert语句时,是否使用当前字段。
update 生成update语句时,是否使用当前字段。
默认情况:hibernate生成insert或update语句,使用配置文件所有项
注意:配置文件如果使用关键字,列名必须使用重音符

6、主键

<id>配置主键
name:属性名称
access="" 设置使用属性还是字段
column="" 表的列名
length="" 长度
type="" 类型
<generator> class属性用于设置主键生成策略
1.increment 由hibernate自己维护自动增长
底层通过先查询max值,再+1策略
不建议使用,存在线程并发问题
2.identity hibernate底层采用数据库本身自动增长列
例如:mysql auto_increment
3.sequence hibernate底层采用数据库序列
例如:oracle 提供序列
4.hilo:基本不使用
5.native 根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个。【】 </generator>
##以上策略使用整形,long, short 或者 int 类型
6.uuid 采用字符串唯一值【】
##以上策略 代理主键,有hibernate维护。
7.assigned 自然主键,由程序自己维护

最新文章

  1. 写Python脚本语言时,“SyntaxError: Non-ASCII character &#39;\xe6&#39; in file”错误的处理
  2. 从C#垃圾回收(GC)机制中挖掘性能优化方案
  3. AWS re:Invent 2014回顾
  4. Linux Linux程序练习十六(进程间的通信信号版)
  5. bbs/贴吧/盖楼的技术实现(PHP)
  6. js的数组申明
  7. Linq的一些记录
  8. 1002 GTY&#39;s birthday gift
  9. js文件缓存之版本管理
  10. Delphi中用Webbrowser加载百度地图滚轮失效(ApplicationEvents里使用IsChild提前判断是哪个控件的消息)
  11. Codeforces#363 Div2
  12. JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)
  13. mapper加载的3种方法
  14. JavaWeb入门笔记
  15. react-native 新手爬坑经历(unable to load script from assets 和could not connect to development server.)
  16. 数据库连接池优化配置(druid,dbcp,c3p0)
  17. java中,什么是方法的重载?需要满足什么条件?两同三不同指的什么?
  18. maven测试时中文乱码问题解决方法
  19. 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读
  20. catkin-tools

热门文章

  1. Ue4 Shader博客
  2. HDU4067 Random Maze(最小费用最大流)
  3. WPF 颜色转换
  4. BZOJ3414 : Poi2013 Inspector
  5. MySQL优化经验和方法汇总
  6. [Cocos2D-x For WP8]Box2D物理引擎
  7. 【BZOJ】1104: [POI2007]洪水pow
  8. 【Java】RuleSource约束常用方法整理
  9. 内存和flash存储的区别
  10. GPIO裸机编程