Hibernate主键生成策略

持久化类的编写规则

持久化类的概述

什么是持久化类

  • 持久化:将内存中的一个对象持久化数据库中过程。Hibernate框架就是用来进行持久化的框架
  • 持久化类:一个java对象与数据库的表建立了映射关系,那么这个类在Hibernate中称为是持久化类
    • 持久化类 = java类 + 映射文件

持久化类的编写规则

持久化类的编写规则

  1. 对持久化类提供一个无参数的构造方法:Hibernate底层需要使用反射生成实例
  2. 属性需要私有,对私有属性提供public的get和set方法:Hibernate中获取,设置对象的值
  3. 对持久化类提供一个唯一标识OID与数据库主键对应:java中通过对现象的地址区分是否是同一个对象,数据库中通过主键确定hi否是统一个记录,在Hibernate中通过持久化类的OID的属性区分是否是同一个对象
  4. 持久化类中属性尽量使用包装类类型:因为基本数据类型默认0,使用0会有很多歧义。包装类类型默认是null
  5. 持久化类不要使用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的语法及其相似,面向对象的查询语言

  1. 基本条件查询
    在这里插入图片描述
  2. 查询分页的
    在这里插入图片描述

Criteria

QBC:Query By Criteria
更加面向对象的一种查询方式

  1. 普通查询
    在这里插入图片描述
  2. 条件查询
    在这里插入图片描述
  3. 分页
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值