hibernate第二天
hibernate的核心思想就是将之前对单个字段的操作变为操作一个对象,使用了ORM(Object relation mapping)对象关系映射的思想
· 在hibernate中对数据库特殊字段的有着具体配置,不同的数据库有不同的主键生成策略
映射到数据的实体对象也需要有以下几点需要注意
- 私有化成员变量
- 提供get/set方法
- 提供无参构造(底层需要反射 反射支持是无参构造)
- 类型尽量使用包装类 private int Integer 因为包装类有null值
- 需要有oid( object id )跟主键相对应
- 持久化类尽量不使用final修饰
主键的shengt生成策略、
主键的生成有俩个位置可以生成 : JAVA 数据库
自然主键: 跟业务有关 参与了业务逻辑主要用来区分不同数据 对象 保证数据不重复
订单表(order_id) 支付 将oid发送了给第三方 第三方响应回来order_id数据
代理主键: 跟业务无关 主要用来区分不同数据 对象 保证数据不重复
JAVA
手动插入
assigned : 手动插入主键
自动插入
increment: 由hibernate 自动查询数据库增长 不适合集群(多个计算机组合成的效果)
每次查询这个表的最大值 加+1 赋值
uuid : 自动产生一个随机的id值
数据库
native : 根据不同数据的底层自动增长
identity: mysql的自动增长(auto_increment) 支持自动增长字段 db2 sqlserver
sequence:oracle 自增长序列
当然在操作持久化对象的时候,持久化对象也存在三种不同的状态
对象 在创建到获得 到 session 其实经历了三种状态
* 瞬时态: 创建一个对象 瞬时态 没有OID 跟session没有关系
* 持久态: 获得一个对象 (重点) 有OID 跟session有关系
* 游离态或者脱管态:session关闭后 叫游离态 有OID 跟session没关系
hibernate的一级缓存和快照机制的原理示意图

hibernate对数据库的操作都需要开启事务
事务指的是 逻辑的一组操作,要么全部成功,要么全部失败
事务的特性:
A 原子性: 一组操作 不可再分割
C 一致性: 事务的前后数据保证一致
I 隔离性(lsolation): 多事务之间的操作
D 持久性: 事务不可逆
隔离问题:
脏读 : 一个事务读到了另一个事务没有提交的数据
不可重复读: 一个事务读到了另一个事务已提交的数据(update)
虚读/幻读: 一个事务读到了另一个事务已提交的数据(insert)
解决方案:
读未提交 不解决任何问题
读已提交 解决脏读 Oracle默认隔离级别
可重复读 解决脏读 和 不可重复读问题 mysql的默认隔离级别
串行化 解决三个问题
对事务的配置
在hibernate的核心配置文件中,


openSession() 表示 每一次调用 获得一个新的session对象
getCurrentSession() 表示获得当前线程的session对象 等效以前的将connection 绑定的到当前线程上
hibernate也存在其他的检索方式,但是使用起来要因环境而异
- oid查询 get/load
- 对象导航查询
- HQL ( Hibernate Query Language) hibernate查询语言 面向对象
- QBC ( Query By Creteria) 比hql更加面向对象 离线查询
- SQL
hibernate第二天的更多相关文章
- 面试题:hibernate 第二天 快照 session oid 有用
## Hibernate第二天 ## ### 回顾与反馈 ### Hibernate第一天 1)一种思想 : ORM OM(数据库表与实体类之间的映射) RM 2)一个项目 : CRM 客户关系管理系 ...
- Hibernate第二天——实体类 与缓存机制
第二天,我们先来了解一下框架里的一个重要概念:实体类 实体类:把数据表或其它持久化数据的格式映射成的类,就是实体类. 实体类的编写规则:由于对应的是javabean,因而也遵循javabean的一些规 ...
- Hibernate第二篇【API讲解、执行流程图】
前言 从上一篇中已经大致介绍了Hibernate并且有了一个快速入门案例的基础了,-.本博文主要讲解Hibernate API 我们看看快速入门案例的代码用到了什么对象吧,然后一个一个讲解 publi ...
- SSH框架之Hibernate第二篇
1.1 持久化类的编写规则 1.1.1 什么是持久化类? 持久化类 : 与表建立了映射关系的实体类,就可以称之为持久化类. 持久化类 = Java类 + 映射文件. 1.1.2 持久化类的编写规则 ( ...
- hibernate 第二次深入接触
1.session 到底如何进行脏处理? 当一个Dept对象加入到session缓存时,Session会为Dept对象的值属性复制一份快照,当Session刷新缓存时,会进行脏处理. 2.OID 用来 ...
- ORM和Hibernate的配置方式
分层体系结构: 逻辑上一般分为三层:表述层(提供与用户交互的界面).业务逻辑层(实现各种业务的逻辑).数据库层(负责存放和管理应用的持久性业务数据). 物理上一般分为两层:物理层(每一层都运行在网络上 ...
- hibernate简单应用
Hibernate 第二章 核心API 和CURD实现 核心API介绍 单表操作方法 查询hql语句 1.认识hibernate 核心思想ORM:实现数据库中的文件一一映射为java中的实体类. 使用 ...
- Hibernate框架--对象的状态,缓存, 映射
回顾Hibernate第二天: 1. 一对多与多对一 2. 多对多 3. inverse/cascade 4. 关联关系的维护 一对多: <set name="映射的集合属性&quo ...
- SSH框架之hibernate《二》
Hibernate第二天 一.hibernate的持久化类和对象标识符 1.1持久化类的编写规范 1.1.1什么是持久化类: ...
随机推荐
- 谢欣伦 - 原创教程 - 使用GDI+绘制抗锯齿斜线
早些年用过GDI的同学都知道,用GDI绘图API函数画斜线那个锯齿有多恶心.就像下图第一行的三条斜线: 坦白说,45度斜线在抗锯齿以前还是蛮抗锯齿的,哈哈,抗不抗都没什么差别. 那第二行很自然就看得出 ...
- (转)Java Socket编程
原文出自:http://www.cnblogs.com/rocomp/p/4790340.html Socket是网络驱动层提供给应用程序编程接口和一种机制.可以把Socket比喻成一个港口码头,应用 ...
- 表达式求值--Java实现
/*将中缀表达式--转化为后缀表达式--属于栈的一种应用 *具体思路: *1.扫描字符串,遇到操作数字符直接不管,存到一个字符串里边 *2.操作符优先级比较--定义了方法 * 栈中优先级高:出栈存进字 ...
- Java基础总结--方法(函数)
---函数的作用---实现特定功能的代码--是一种代码重用的方式---函数的格式---访问修饰符 返回值类型 函数名(参数列表){语句:} 参数列表包含参数的类型和参数名(参数列表要注意顺序)---关 ...
- java设计模式-工厂模式(springweb为例子)
一般而言,工厂模式分为3种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种工厂模式逐层深入吧. 一,从springWeb.jar包使用抽象工厂模式的一个例子聊起 之前对spring各种痴迷,所以在需 ...
- LeetCode 665. Non-decreasing Array (不递减数组)
Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...
- js获取当前页面的URL并且截取?之后的数据,返回json
js获取当前页面的URL并且截取'?'之后的数据,返回json格式的数据 最近想要把学到的东西整理一下,以后方便查找,也是一种自我累积,如果有错误或者更好的,欢迎提出! 这篇文档主要是写关于获取页面的 ...
- python函数说明内容格式错误
def levlTwo(levloneList,levlOneNum): """ 入参levloneList 一级城市列表 入参levlOneNum 用户选择的城市序号 ...
- 如何在Windows上搭建Android开发环境
Android开发越来越火,许多小伙伴们纷纷学习Android开发,学习Android开发首要任务是搭建Android开发环境,由于大家 主要实在Windows 上开发Android,下面就详细给大家 ...
- 主键乱序插入对Innodb性能的影响
主键乱序插入对Innodb性能的影响 在平时的mysql文档学习中我们经常会看到这么一句话: MySQL tries to leave space so that future inserts do ...