Hibernate的缓存&事务&持久化

目录

一.Hibernate持久化类的编写规则

1.1 什么是持久化类

1.2 持久化类的编写规则

二.Hibernate 主键生成策略

2.1 区分自然主键和代理主键

2.2 Hibernate的主键生成策略

三.持久化类的三种状态

3.1 三种状态的概述

3.2 区分三种状态持久化对象

3.3 三种状态的转换(了解--面试题)

3.4 持久态可以自动更新数据库

四.Hibernate的一级缓存

4.1 一级缓存的概述

4.2 测试一级缓存

4.3 一级缓存的内部结构(快照区)

4.4  一级缓存的管理的方法:清空一级缓存的数据

五.Hibernated的事务控制

5.1 什么是事务​

5.2 事务的特性

5.3 事务的并发问题

5.4 事务的隔离级别

5.5 Hibernate事务管理

六.Hibernate的其它API

6.1 Query

6.2 Criteria

6.3 SQLQuery


一.Hibernate持久化类的编写规则

1.1 什么是持久化类

1.2 持久化类的编写规则

总结:

  • 提供无参数的构造方法                
  • 类中的成员都是私有的private                                      
  • 对私有属性提供get/set方法     
  • 属性尽量使用包装类类型         :默认值不同的,包装类默认值null,基本数据类型默认0。
  • 持久化类不要使用final进行修饰     :使用final修饰,延迟加载失效,变为立即加载。
  • 类中需要提供标识属性(OID),与表中主键建立映射关系     :Hibernate根据标识属性来判断对象是否是同一个的。
  • Hibernate中实体类的标识属性:  Object Identifie  简称OID属性,就是配置文件中对应主键的那个实体类属性.
    • 作用: 让hibernate来区分对象是否是同一个,如果多个对象的标识属性值相同,hibernate会认为是同一个对象,存储数据会报错

二.Hibernate 主键生成策略

2.1 区分自然主键和代理主键

  • 自然主键:创建表的时候,使用的是实体中的自身属性作为表的主键。
    • 例如: 创建一张人员表,可以用自生的身份证号(唯一的不可重复的)作为主键
  • 代理主键:创建表的时候,使用的不是实体中的自身的属性作为主键,创建一个不相关一个字段作为主键。
    • 例如: 创建一张人员表,不使用自生的身份证号(唯一的不可重复的)作为主键,用另外创建一个id作为主键
  • 尽量使用代理主键。如果自然主键,如果主键需要参与到业务逻辑中,有可能需要改变很多的设计和代码。

2.2 Hibernate的主键生成策略

主键不应该由用户自己维护,应该统一管理,那么Hibernate就提供了主键统一管理的方式:主键生成策略。

  • increment                 :自动增长,是Hibernate中提供一种自动增长方式,不是数据库中的自动增长。(适用于short、int、long类型的主键)首先使用select max(cust_id) from cst_customer;将这个最大值+1作为下一条记录的主键。对于并发访问数据库不适用
    • identity                      :自动增长,适用于shortintlong类型的主键,使用的是数据库自动增长机制。不是所有数据库都支持自动增长,比如Oracle没有自动增长。
  • sequence                           :序列,适用于shortintlong类型的主键,使用序列方式完成主键的生成。必须是支持序列的方式的数据库。Oracle的自动增长
  • native                        :本地策略,根据底层的数据库不同,自动选择使用identity还是sequence
  • uuid                            :随机字符串,适用于字符串类型的主键。
  • assigned                    :Hibernate不维护主键,开发人员需要手动设置主键。

总结: 以后如果针对是数值型,选择用native  如果是varchar类型,可以选择用uuid     但是也可以不用hibernate维护,自己在程序中手动设定唯一非空(assigned)uuid

三.持久化类的三种状态

3.1 三种状态的概述

总结:

  • 瞬时态    :没有持久化标识OID,没有被session操作管理。
  • 持久态    :有持久化标识OID,已经被session操作管理。
  • 脱管态(离线态)      :有持久化标识OID,没有被session操作管理。

3.2 区分三种状态持久化对象

3.3 三种状态的转换(了解--面试题)

3.4 持久态可以自动更新数据库

四.Hibernate的一级缓存

4.1 一级缓存的概述

总结:

一级缓存:称为Session级别的缓存。因为一级缓存的生命周期与session一致的。自带的,不可卸载的。(由Session中一系列的Java集合构成的)

二级缓存:称为SessionFactory级别的缓存。需要进行配置的缓存的插件。默认不开启的。 ehche==redis

 除了删除,增改查和数据库打完交道,都会往一级缓存中留一份,查询先去一级缓存查,差不到 在去数据库查 查询以后还会放到一级缓存中一份,但是session只要关闭,一级缓存的数据全部清空

4.2 测试一级缓存

4.3 一级缓存的内部结构(快照区)

4.4  一级缓存的管理的方法:清空一级缓存的数据

  • clear、evict、close管理一级缓存的相关的方法:
  • clear可以清空一级缓存的所有数据
  • evict可以清空一级缓存的某一个对象的数据

五.Hibernated的事务控制

5.1 什么是事务

5.2 事务的特性

5.3 事务的并发问题

5.4 事务的隔离级别

5.5 Hibernate事务管理

六.Hibernate的其它API

6.1 Query

6.2 Criteria

6.3 SQLQuery

猜你喜欢

转载自blog.csdn.net/qq_30162219/article/details/86656575