Hibernate 小阶段总结
(一)Hibernate入门
通俗的话来说:Hibernate是用于面向对象操控数据库,对JDBC进行轻量级封装。(在java世界中传统的来说是JDBC访问数据库。)
1)Hibernate定性:对象关系映射框架。(底层依旧是JDBC)
2)Hibernate框架的结构图

解析:Java Application 应用程序
Persistent Object 持久化对象
Hibernate(Configuration、Session Factory、Session、 Transation、Query、Criteria)六大接口
JNDI:(Java Naming and Directory Interface)是java的命名与目录接口
JDBC:(Java Date Base Connectivity)数据库连接,是一种执行语句的Java API
JTA:(Java Transaction API)全局事务处理
3)什么是ORM?
ORM是对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),
是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
4)什么是持久化?
持久化是程序数据在瞬时状态和持久状态间转换的过程
POJO(plain ordinary java object) 简单无规则java对象纯的传统意义的java对象。就是说在一些Object/Relation Mapping工具中,
能够做到维护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。我的理解就是
最基本的Java Bean,只有属性字段及setter和getter方法。
解析一:一个POJO(Plain Ordinary Java Object普通的java对象)持久化以后就是PO
JavaBean=POJO
PO=POJO+xml配置
直接用它传递、传递过程中就是DTO(Data Transefer Object)
直接用来对应表示层就是VO
解析二:其对象或实例将存储在数据库表中的Java类在Hibernate中称为持久化类
PO=JavaBean+xml配置
POJO名称用于强调一个给定的对象是一个普通的Java对象,而不是一个特殊的对象,好更不是Enterprise JavaBean(ORM框架的实现产品)。
5)持久化对象的唯一标识是OID
解析:我们都知道,Java中安内存地址不同区分同一个类的不同对象
关系数据库用主键区分同一条记录
Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系
01.什么是OID?
解析:OID 是持久化类(Student)与数据表主键对应属性, 用来唯一区分持久化对象。
02.尽量使用包装类
解析:一个学生成绩为0,无法区分是参加了考试考取了0分,还是没有成绩。
如果使用包装类,数据库就会存入null,证明该学生没有参加考试
区别:java的包装类和基本数据类型
Java的基本类型包装类:
Integer 、Long、Short、Byte、Character、Double、Float、Boolean、BigInteger、BigDecmail
其中BigInteger、BigDecimal没有相对应的基本类型,主要应用于高精度的运算,BigInteger 支持任意精度的整数,BigDecimal支持任意精度带小数点的运算。
Java语言提供了八种基本类型:(六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 )
整数:包括int,short,byte,long ,初始值为0
浮点型:float,double ,初始值为0.0
字符:char ,初始值为空格,即'' ",如果输出,在Console上是看不到效果的。
布尔:boolean ,初始值为false
6)主键生策略(基本)
* increment
由hibernate完成 主键递增,
原理:select max(id) , insert时max(id)+1 ,完成主键递增
优点:跨数据库
缺点:多线程并发访问问题(第一个线程执行成功,第二个线程报错)
* identity
由底层数据库来完成自增 ,要求数据库必须支持自增主键 mysql支持 ,oracle不支持
* sequence
编号列生成由底层数据库提供序列,来完成主键自增,要求数据库必须支持序列 mysql不支持,oracle支持
create sequence myseq; 创建序列
insert into customer values (myseq.nextval); 插入数据时调用序列,序列+1
* native
采用数据库支持自增策略, mysql就用identity 、oracle就用sequence
策略1) ---> 策略4) 要求数据库主键必须为数字 ,因为只有数字才能自增
* uuid
32位 唯一字符串, 主键使用varchar 类型
真实开发中,用程序提供uuid值
*assigned
手动指定主键的值,该主键一般有实际意义,例如订单单号(20160114-A002)20160114-B001 20160114-C002。
7)Hibernate中Java对象的三种状态之间的转换

8)脏检查和缓存机制
什么是脏检查:当事务提交时,Hibernate会对session中的PO(持久化对象)进行检测,判断持久化对象的状态是否发生了改变,如果发生了改变就会将改变更新到数据库中。
(现数据比原数据是否改变)
Session会话中flush()方法和clear()方法的共同点都是往数据库
Flush()数据库同步的不清除缓存的
Clear()清除缓存的
Hibernate 小阶段总结的更多相关文章
- 一个Hibernate小程序
基本步骤 在前一篇博文Hibernate环境搭建中为大家详细的介绍如何搭建一个学习新类库的学习环境.今天,为大家带来一个Hibernate小例子,让大家能够快速上手. 步骤如下: 1.配置hibern ...
- 初识hibernate小案例
使用hibernate前需要导入相关JAR包. 1.它可以接受词文法语言描述,并能产生识别这些语言的语句的程序 2.是一个Java的XML API,类似于jdom,用来读写XML文件的 3.支持注解配 ...
- Spring+SpringMVC+Hibernate小案例(实现Spring对Hibernate的事务管理)
原文地址:https://blog.csdn.net/jiegegeaa1/article/details/81975286 一.工作环境 编辑器用的是MyEclipse,用Mysql数据库,mave ...
- Hibernate小解惑.
1.什么是SessionFactory?什么是Session?httpsession和hibernate的session的有什么区别? SessionFactory接口负责初始化Hiber ...
- Struts2+EasyUI+Hibernate小实例
概述 这个实例主要是前台数据到后台数据的传递和后台数据到前台数据的传递,完成数据的新增,以及对新增数据的展示.下面是详细的过程: Hibernate(数据库部分) 这里只是数据库的连接和数据库实体与物 ...
- JAVA框架之Hibernate【配置文件详解】
Hibernate配置文件主要功能是配置数据库连接和Hibernate运行时所需的各种属性,配置文件应该位于JAVA应用或者JAVA Web应用的类文件中,刚开始接触Hibernate的时候,感觉Hi ...
- [转载]Hibernate如何提升数据库查询的性能
目录(?)[-] 数据库查询性能的提升也是涉及到开发中的各个阶段在开发中选用正确的查询方法无疑是最基础也最简单的 SQL语句的优化 使用正确的查询方法 使用正确的抓取策略 Hibernate的性能优化 ...
- Hibernate学习之——Hibernate环境搭建
之前在写关于安卓闹钟的教程,写了一半就没后一半了,其实自己也没做好,在校外实习,校内毕业实习又有任务,只能先放放了,等毕业实习结束之后,在继续安卓闹钟开发之旅,相信这个时间不会很久的.现在毕业实习用到 ...
- Hibernate面试题收藏
hibenate的面试总结. 可能现在大家常常还会遇到一个些面试的时候问一些关于hibernate的问题,我个人觉得,这些东西一般做过开发的人在使用上没有任何的问题的,但是如果是要你来说就不一定能够说 ...
随机推荐
- fir.im Weekly - 除了新 MacBook Pro,近期值得关注的移动开发好资源
最近,最引人瞩目的莫过于 Apple 产品发布会,MacBook Pro 的更新可能是四年来变化最大的一版.除了更轻.更薄.性能更好.电力更足之外,最大的变化是加入了Touch Bar,被定义为 Ma ...
- Trace2:创建SQL Trace
Trace是轻量级的追踪工具,几乎对系统没有任何副作用,开启Trace,经常能够帮助DBA追踪到一些非常有用的信息.Trace出现的比较早,MS推出更强大的Extended Events来取代Trac ...
- 前端MVVM框架avalon揭秘 - 双向绑定原理
avalon大家可能不熟悉,但是Knockout估计或多或少听过用过,那么说说KO的几个概念 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Dec ...
- 推荐12个漂亮的 CSS3 按钮实现方案
在过去,我们都是使用图片或者JavaScript来实现漂亮的按钮效果,随着越来越多的浏览器对CSS3的支持和完善,使用CSS3来实现美观的按钮已没有太多的障碍.今天,本文收集了12个很不错的CSS3按 ...
- Java之控制反转和依赖注入
1.简介 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念. 2.案例 1)一般情况下的类耦合 Main.java public clas ...
- ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
前言 事情不太多时,会时不时去看项目中同事写的代码可以作个参考或者学习,个人觉得只有这样才能走的更远,抱着一副老子天下第一的态度最终只能是井底之蛙.前两篇写到关于断点传续的文章,还有一篇还未写出,后续 ...
- java.util.NoSuchElementException: Timeout waiting for idle object
出现这个问题第一个想法就是连接池的参数设置问题,把最大连接数量设置大一些就行了,但是我就一个客服端访问服务器,连接池连接数量不可能会不够用.我的项目架构是spring mvc+hibernate,用s ...
- 应用程序框架实战二十九:Util Demo介绍
上文介绍了我选择EasyUi作为前端框架的原因,并发放了最新Demo.本文将对这个Demo进行一些介绍,以方便你能够顺利运行起来. 这个Demo运行起来以后,是EasyUi的一个简单CRUD操作,数据 ...
- T-SQL:毕业生出门需知系列(七)
第7课 创建计算字段 7.1 计算字段(格式化字段) 存储在数据库表中的数据一般不是应用程序所需要的格式,如: 1.需要显示公司名,同时还需要显示公司的地址,但这两个信息存储在不同的表列中. 2.列数 ...
- PHP中有关正则表达式的函数集锦
之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载.当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有 ...