持久化类

java类与数据库的表建立了映射关系,该类被称为持久化类

1)、编写规则

①无参构造,使得Hibernate可通过反射建立对象

②私有属性,get/set方法

③持久化类提供一个唯一标识OID与数据库主键对应

④持久化类属性尽量使用包装类(基本数据类型,默认值为0,有些歧义)

⑤持久化类不要使用final修饰(延迟加载需要继承产生代理类,而final修饰的类不能继承,即延迟加载失效)

2)、主键

①分类
自然主键:表中一个字段,实体类中一个具体属性
代理主键:主键的本身不是表中必须的一个字段
实际开发中,尽量使用代理主键, (OCP原则,主键参与有可能需要修改源代码)

②主键生成策略
在实际开发中一般不允许用户手动设置主键,一般将主键交给数据库,手动编写程序进行设置。

3)、持久化类的三种状态

hibernate是持久层框架,通过持久化类完成ORM操作。为了更好的管理持久化类,将持久化类分成三种状态。
持久化类=java类 + 映射
①瞬时态(transient)
没有唯一的OID,没有被session管理

②持久态(persistent)
有唯一的OID,有被session管理

③脱管态(detached)
有唯一的OID,没有被session管理

状态变换:刚new(瞬时态)、设置OID,并使用Session操作(持久态)、关闭session(托管态)

4)、三种状态转换

5)、持久态对象的特性

持久态对象可自动更新数据库:通过数据库获取到持久态对象后,更新数据的同时会自动更新数据库
底层原理,一级缓存。

缓存

1)、概述

将数据存入到内存中,使用的时候直接从缓存中获取,不用通过存储源

2)、一级缓存

Session级别的缓存(由Session中的一系列java集合构成),自带不可卸载
①特殊区域:
快照区:persistenceContext.entityEnteryContext.head.entityEntry.loadedState
缓存区:persistenceContext.entitiesByKey.table
当获取到持久对象时,会在缓存区存储一份,在快照区存储一份(一个map关系)
修改数据时,会修改缓存区的数据
提交事务时,会比较缓存区和快照区,若不一致则会更新数据库

例:
①执行查询后,缓存区和快照区都存储了数据
缓存区:

快照区:

②执行更新操作后,缓存区和快照区不相同
缓存区改变:

快照区不变:

②清空缓存
session.clear():清空所有缓存
session.evict(对象):清除某个对象的具体缓存

3)、二级缓存

SessionFactory级别的缓存,需配置

事务管理

1)、设置事务隔离级别

从轻到重:1、2、4、8
在核心配置文件中:

<property name="hibernate.connection.isolation">value</property>
2)、线程绑定

①Service层封装业务逻辑操作,而Dao层是封装数据源的单一操作
则事务需要添加在事务层上
此时需要保证多个操做的连接对象是同一个:向下传递、使用线程绑定(ThreadLocal)
Ps:这时执行完一个操作后,不应提交事务和关闭session

②Hibernate框架内部已经绑定好了ThreadLocal
在核心文件配置:

<property name="hibernate.current_session_context_class">value</property>

value有三个值:thread(对象声明周期与本地线程绑定)、jta(与JTA事务绑定)、managed(委托程序管理)
调用:getCurrentSession();

建立一个Utils来管理连接

public class SessionUtil {private static SessionFactory sFactory;static {Configuration con = new Configuration().configure();sFactory = con.buildSessionFactory();}/*** 获取Session对象* @return*/public static Session getSession() {return sFactory.openSession();}/*** 关闭Session对象* @param session*/public static void closeSession(Session session) {session.close();} /*** 利用线程绑定,完成跨类事务* @return*/public static Session getCurrentSession() {return sFactory.getCurrentSession();}
}

Hibernate框架(持久化类、缓存、事务管理)相关推荐

  1. hibernate教程--持久化类状态详解

    一. Hibernate的持久化类状态: 1.1 Hibernate的持久化类状态 持久化类:就是一个实体类 与 数据库表建立了映射. Hibernate为了方便管理持久化类,将持久化类分成了三种状态 ...

  2. hibernate教程--持久化类状态

    一. Hibernate的持久化类状态: 1.1Hibernate的持久化类状态 持久化类:就是一个实体类 与 数据库表建立了映射. Hibernate为了方便管理持久化类,将持久化类分成了三种状态. ...

  3. Spring整合Hibernate 二 - 声明式的事务管理

    Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: <bean id="txManager" class="o ...

  4. Spring 框架基础(05):事务管理机制,和实现方式

    本文源码:GitHub·点这里 || GitEE·点这里 一.Spring事务管理 1.基础描述 Spring事务管理的本质就是封装了数据库对事务支持的操作,使用JDBC的事务管理机制,就是利用jav ...

  5. Spring - Java/J2EE Application Framework 应用框架 第 7 章 事务管理

    第 7 章 事务管理 7.1. Spring事务抽象 Spring提供了一致的事务管理抽象.这个抽象是Spring最重要的抽象之一, 它有如下的优点: 为不同的事务API提供一致的编程模型,如JTA. ...

  6. Hibernate学习(二)持久化类,主键生成策略、一级缓存、事务

    持久化类: 持久化:将内存中的一个对象持久化到数据库中的过程.hibernate是持久层的ORM框架 持久化类:java中的一个对象和数据库表建立了映射关系,就可以称为持久化类,java类+映射文件. ...

  7. Hibernate——(3)主键生成策略持久化类的三种状态

    一 持久化类 1.持久化:内存对象--->数据库(硬盘)Hibernate持久化的框架 持久化类:Java对象与数据库中的表建立映射关系            Hibernate就称为持久化类( ...

  8. (转) Hibernate持久化类与主键生成策略

    http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英 ...

  9. Spring框架(下)JdbcTemplate、声明式事务管理

    Spring框架(下)JdbcTemplate.声明式事务管理 (一)使用JdbcTemplate 1.概述 为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个 ...

  10. spring框架学习 - Data Access之 事务管理 - 声明式事务管理

    接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122085016?spm=1001.2014.3001.5502 4.声明式事务管理 ...

最新文章

  1. 02CSS基础选择器
  2. 修改 wordpress 后台管理员登录地址
  3. 2016年第七届蓝桥杯C/C++ C组国赛 —— 第二题:反幻方
  4. C#实现 UDP简单广播
  5. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——工具类
  6. 行上下移动_这有一台你迟早要用到的手持式“移动空调”
  7. CRM 客户端程序开发:设置实体表单界面字段的值
  8. 2018腾讯内部转岗面试题3——找出数组中比左边大比右边的小的元素
  9. non-rigid shape registration using similarity-invariant differential coordinates
  10. 计算纯文本情况下RichTextBox实际高度的正确方法(.NET)
  11. 采用dlopen、dlsym、dlclose加载动态链接库【转】
  12. 计算机考研政治考哪些知识,带你了解408考研大纲,及21考研政治复习建议
  13. 接口自动化-Cookie、Session、Token鉴定解决方案
  14. html设置图片为部分背景颜色,设置HTML的一个部分作为一个不同的背景颜色
  15. uni-app 点击生成海报
  16. writing idiomatic python 读书笔记(5)
  17. 加油卡充值 数据接口
  18. CCRC信息安全服务资质分类及申请流程
  19. Kitty中的动态线程池支持Nacos,Apollo多配置中心了
  20. python生成车架号

热门文章

  1. leetcode 实现 strStr()
  2. C#LeetCode刷题之#16-最接近的三数之和(3Sum Closest)
  3. java @Column 引发的一点思考
  4. 垃圾回收算法的实现原理_有关垃圾回收算法工作原理的动画指南
  5. 一键设置mac显示选项_如何通过关闭浏览器中的一个选项卡将Mac上的电池寿命延长一倍...
  6. PyTorch学习(7)-Seq2Seq与 Attention
  7. Python | 面试必问,线程与进程的区别,Python中如何创建多线程?
  8. 全程干货,requests模块与selenium框架详解
  9. 牛逼了!Python 开发植物大战僵尸游戏
  10. 不到 100 行 Python 代码徐峥变葛优