文章目录
持久化类的编写规则
持久化类的概述
什么是持久化类
- 持久化:将内存中的一个对象持久化数据库中过程。Hibernate框架就是用来进行持久化的框架
- 持久化类:一个java对象与数据库的表建立了映射关系,那么这个类在Hibernate中称为是持久化类
- 持久化类 = java类 + 映射文件
持久化类的编写规则
持久化类的编写规则
- 对持久化类提供一个无参数的构造方法:Hibernate底层需要使用反射生成实例
- 属性需要私有,对私有属性提供public的get和set方法:Hibernate中获取,设置对象的值
- 对持久化类提供一个唯一标识OID与数据库主键对应:java中通过对现象的地址区分是否是同一个对象,数据库中通过主键确定hi否是统一个记录,在Hibernate中通过持久化类的OID的属性区分是否是同一个对象
- 持久化类中属性尽量使用包装类类型:因为基本数据类型默认0,使用0会有很多歧义。包装类类型默认是null
- 持久化类不要使用final进行修饰:延迟加载本身是hibernate一个优化手段。返回一个代理对象(javassist)可以对没有实现接口的类产生代理,使用了底层字节码增强技术,继承这个类进行代理。如果不能继承,不能产生代理对象,延迟加载也就失效。load方法和get方法一致
主键生成策略
主键的分类
自然主键
自然主键:主键的本身就是表中的一个字段(实体中的一个具体的属性)
代理主键
主键的本身不是表中必须的一个字段(不是实体中的某个具体的属性)
注意:
在实际开发中,尽量使用代理主键
好的程序设计满足ocp原则:对程序的扩展时open的,对修改源码时close的
主键的生成策略
Hibernate的主键生成策略
在实际开发中一般不允许用户手动设置主键,一般将主键交给数据库,手动编写程序进行设置。在Hibernate中为了减少程序的编写,提供了很多中的主键的生成策略
- increment:hibernate中提供的自动增长机制,使用short,int,long类型的主键。在单线程中使用
- identity:适用于short,int,long类型的主键,那个的时数据库底层的自动增强机制,适用于有自动增强机制的数据库(mysql等)
- sequence:使用short,int,long类型的主键,采用的时序列的方式(Oracle)
- uuid:适用于字符串类型的主键。使用hibernate中的随机方式生成字符串主键
- native:本地策略,可以在identity和sequence之间进行自动切换
- assigned:hibernate放其外键的管理,需要通过手动编写程序或者用户自己设置
持久化类的三种状态
瞬时态
这种对象没有唯一的标识OID,没有被session管理,称为瞬时态对象
持久态
这种对象有唯一的标识OID,被session管理,称为持久态对象
注意:持久化类的持久态对象,可以自动更新数据库,例如:
托管态
这种对象有唯一的标识OID,没有被session管理,称为托管态对象
区分三种状态对象
缓存的概述
什么是缓存
缓存:是一种优化方式时,将数据存入到内存中,使用的时候直接从缓存中获取,不用通过存储源
Hibernate的一级缓存
Hibernate框架总提供了优化手段:缓存,抓取策略。Hibernate中提供了两种缓存机制:一级缓存,二级缓存。Hibernate的一级缓存,称为Session级别的缓存,一级缓存生命周期与Session一致(一级缓存是由Session中一系列集合的java 集合构成)。一级缓存是自带的不可卸载的(Hibernate的二级缓存是SessionFactory级别的缓存,需要配置的缓存)
证明一级缓存的存在
HIbernate的一级缓存的结构
一级缓存中特殊区域:快照区
事务管理
HIbernate中设置事务隔离级别
线程绑定的Session
Hibernate的其它API
Query
Query接口用于接收HQL,查询多个对象
HQL:Hibernate Query Language查询语言,这种语言与sql的语法及其相似,面向对象的查询语言
- 基本条件查询
- 查询分页的
Criteria
QBC:Query By Criteria
更加面向对象的一种查询方式
- 普通查询
- 条件查询
- 分页