主键的生成策略:
Oracle: assigned identity native assigned sequence
SQL: assigned sequence
类型说明:
assigned: 主键由外部程序负责生成,无需Hibernate参与。
hilo: 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。高低算法
increment: 主键按数值顺序递增
identity:采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制
sequence: 采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence
native:由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式
uuid.hex: 由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键
uuid.string:与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)
foreign: 使用外部表的字段作为主键。一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性
举例说明“::
不存在的字段表自动创建:
hbm2ddl:
update:只会影响数据的字段
create:如果不存在,会删除相关表结构,再新建,效率低!!!
hibernate查询:
1.Session接口中的方法介绍:
beginTransaction() : 事务
void delete(Object object): 删除与该对象关联的数据里内的一条记录
Serializable save(Object object): 将一个实体实例持久化,返回该持久化实例的id。在持久化之前必须手动或自动的指派id。
void update(Object object): 通过给定的分离状态的实例的id更新数据库记录
saveOrUpdate():兼具了save()和update()方法的功能,该方法根据传入参数的状态执行不同的操作,
当为临时状态时,调用save()方法;
当为持久化状态时,则直接返回;
当为游离状态时,调用update()方法
merge():
主要用于更新和保存实体,
当实体不存在是,则执行保存操作,
当实体已经存在时,执行更新操作,
其实同saveOrUpdate()的功能是类似的。
clear():清除缓存
evict(Object object) :清除某个缓存,有点类似:session.removeAttribute(o);
close():关闭会话
flush():可以强制进行从内存到数据库的同步
2.VO,PO 介绍
Hibernate的对象有3种状态:
瞬时态(Transient) :
瞬时对象和脱管对象也称为VO(Value Object)。
持久态(Persistent)
处于持久态的对象也称为PO(Persistence Object) 持久对象具有如下特点
和session实例关联
在数据库中有与之关联的记录
脱管态(Detached)
如图:
3.get和load方法的区别:
作用根据主键查询数据
get 查询数据不存在返回null,没有采用延迟加载
load 查询数据不存在报错误,采用延迟加载【懒加载】
查询返回的是代理对象,如果查询的代理对象没有使用,不会进行真正的查询
4.HQL查询
HQL(Hibernate Query Language)针对hibernate的查询语言
HQL和SQL的比较:
HQL:完全面向对象,对象名 属性,类名,属性名 是区分大小的
SQL:面向关系型数据库,表名 字段名
具体查询操作:
1.多行一列,输出用Object接收
2.多行多列:输出用object[]
3.多行所有列:用对象接受,不能用*
4.查询统计数据:uniqueResult() =》返回结果是long,count(1) 不被支持
5.带条件查询
1.占位符
2.命名参数
3.Map
4.对象
6.分页查询
7.批量修改
8.批量删除
5.容器查询:
6.原生本地SQL查询
1.多行一列
2.多行多列
3.多行所有列
4.查询统计数据。列别名,及指定返回类型
5.其他的