Hibernate学习(1)简单介绍
1.什么是Hibernate?
首先,Hibernate是数据持久层的一个轻量级框架。数据持久层的框架有非常多比方:iBATIS,myBatis,Nhibernate,Siena等等。
而且Hibernate是一个开源的orm(object relations mapping)框架。提供了查询获取数据的方法。用面向对象的思想来操作数据库。节省了我们开发处理数据的时间。
2.那使用Hibernate的长处呢?
1.使用简单介绍的hql语句(Hibernate query language)。能够不使用传统的insert,update等sql语句。比方insert一个对象。原来的做法是:insert into 表名称 alue(值1,值2,值3,……)。而如今的做法是:save(对象)。
2.使用or映射。对象到关系数据库之间的映射。
是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而如今Hibernate做法是:直接由对象映射到表。
3.没有侵入性,移植性比較好。什么是没有侵入性?就是Hibernate採用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。
这种话,此类就是一个普通的java类,所以移植性比較好。
4.支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,仅仅是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻辑层提供了一个接口session,而其它的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件里。
3.当然一个事物,不可能十全十美。即使如此优秀的Hibernate也有自己的弱点。比方:若是大量数据批量操作。则不适合使用Hibernate。
而且一个持久化对象不能映射到多张表中。
4.Hibernate中核心5个接口
1.Configuration接口:负责配置及启动Hibernate,用来创建sessionFactory
2.SessionFactory接口:一个SessionFactory相应一个数据源存储。也就是一个数据库相应一个SessionFactory。
SessionFactory用来创建Session对象。而且SessionFactory是线程安全的,能够由多个线程訪问SessionFactory共享。
3.Session接口:这个接口是Hibernate中经常使用的接口,主要用于对数据的操作(增删改查)。而这个Session对象不是线程安全的。不能共享。
4.Query接口:用于数据库的查询对象。
5.Transaction接口:Hibernate事务接口。它封装了底层的事务操作,比方JTA(;java transcation architecture)全部的数据操作。比方增删改查都写在事务中。
那我们看一下hibernate中总体的内容:
我们一一介绍当中的内容。
- Hibernate出现的原因上篇博客已经介绍。能够參考《Hibernate介绍》
- Hibernate中的核心五大接口,在上篇博客中也已经介绍,能够參考《Hibernate介绍》
- 怎样搭建Hibernate,请參考《八步具体解释Hibernate的搭建及使用》
- 持久化对象的三种状态。
分别为:瞬时状态(Transient)。持久化状态(Persistent)。离线状态(Detached)。三种状态下的对象的生命周期例如以下:
三种状态的差别是:瞬时状态的对象:没有被session管理。在数据库没有;持久化状态的对象:被session管理,在数据库存在,当属性发生改变,在清理缓存时。会自己主动和数据库同步。离线状态:没有被session管理,可是在数据库中存在。
5.測试工具Juit。
測试类须要继承TestCase。编写单元測试方法。方法名称必须为test开头。方法没有參数没有返回值,採用public修饰。当中在測试中,查询对象时,使用get或者load两种方法进行载入,这个方案的差别:get不支持延迟载入。而load默认情况下是支持延迟载入。而且get查询对象不存在时。返回null;而load查询对象不存在时,则抛出ObjectNotFoundException异常。
6.悲观锁和乐观锁解释。
悲观锁为了解决并发性。跟操作系统中的进程中加入锁的概念一样。就是在整个过程中在事务提交之前或回滚之前,其它的进程是无法訪问这个资源的。悲观锁的实现方式有两种:一种使用数据库中的独占锁。还有一种是在数据库加入一个锁的字段。hibernate中声明锁例如以下:
Account account = (Account)session.get(Account.class, 1, LockMode.UPGRADE);而net.sf.hibernate.LockMode类表示锁模式。当取值LockMode.UPGRADE时,则表示使用悲观锁for update。而乐观锁是为了解决版本号冲突的问题。就是在数据库中加入version字段。每次更新时,则把自己的version与数据库中的version进行比較,若是版本号相比較低。则不同意进行改动更新。
7.H ibernate中的缓存机制。
缓存是什么呢?缓存是应用程序和数据库之间的内存的一片区域。
基本的目的是:为了降低对数据库读取的时间。
当查询数据时,首先在缓存中查询,若存在。则直接取出,若不存在,然后再向数据库中查询。
所以应该把经常訪问数据库的数据放到缓存中。至于缓存中的数据怎样不断的置换。这也须要涉及一种淘汰数据的算法。
谈到这个hibernate中的缓存,你想到了什么呢?刚才叙述缓存时。是否感觉非常熟悉。感觉从哪也听过似的。嗯呢,是呢。是非常熟悉,写着写着就非常熟悉。这个刚才的缓存以及缓存的置换算法就和计算机组成中的cache相似。
好吧,来回到我们hibernate中的缓存。
hibernate中的缓存能够分为两种:一级缓存,也称session缓存;二级缓存。是由sessionFactory管理。
那一级缓存和二级缓存有什么差别呢?差别的关键关于:缓存的生命周期,也就是缓存的范围不同。
那首先介绍一下缓存的生命周期,也就是缓存的范围。
1.事务缓存,每一个事务都有自己的缓存,当事务结束。则缓存的生命周期相同结束,正如上篇博客中我们提到,对数据库的操作,增删改查都是放到事务中的。和事务保持同步,若是事务提交完成,通常是不同意是再次对数据库进行操作。
所以session是属于事务缓存的。
2.应用缓存,一个应用程序中的缓存,也就是应用程序中的全部事务的缓存。
仅仅有当应用程序结束时。此时的缓存的额生命周期结束。二级缓存就是应用缓存。
3.集群缓存。被一台机器或多台机器的进程共享。
这下明确了一级缓存和二级缓存的差别了吧。
那一级缓存和二级缓存的共同点是:都是缓存实体属性。
二级缓存普通情况都是由第三方插件实现的。第三方插件如:
EHCache,JbossCache(是由Jboss开源组织提供的)。osCache(open
symphony),swarmCache。
前三种对hibernate中的查询缓存是支持的,后一种是不支持hibernate查询缓存。
那什么是hibernate查询缓存呢?
查询缓存是用来缓存普通属性的,对于实体对象而言,是缓存实体对象的id。
在了解Hibernate之前,我们先回想一下传统JDBC訪问数据库的相关内容。重点在于分析JDBC訪问存在哪些缺陷,这些缺陷在Hibernate中是怎样思考和解决的?
JDBC主要对象
DriveManager:代表驱动程序管理器,负责创建数据库连接
Connection:代表数据库连接
Statement:负责运行SQL语句
PrepareStatement:继承Statement,负责运行SQL语句,具有提前定义SQL语句的功能
Result:代表SQL查询语句的查询结果集
JDBC訪问步骤
1、载入并注冊驱动JDBC驱动程序
2、建立数据库连接
3、创建Statement对象。并准备运行SQL语句
4、运行SQL语句
5、依次关闭Statement和Connection对象
JDBC缺陷
1、编程人员既要懂Java语言。又要懂SQL语言。才干编写数据库訪问代码
2、程序代码中嵌入大量字符串形式点的SQL语句,降低了程序代码的独立性和可读性
3、程序代码与关系数据库结构绑定在一起,削弱了程序代码的独立性和可靠性。例:数据库表改动了一个字段名。那么程序代码中涉及的SQL语句也要进行改动
4、编程人员须要了解,对象和表、属性和字段相应关系。因此编程人员即须要熟悉对象模型,又须要懂得关系数据库,还要了解两者的相应关系,所以编程人员不能依照全然面向对象的思维来编敲代码代码
了解JDBC訪问数据库的缺陷之后。我们接下来会做一个简单的演示样例,并针对此演示样例分析一下,Hibernate的运行步骤和怎样解决JDBC带来的缺陷。
Hibernate学习(1)简单介绍的更多相关文章
- Hibernate体系结构的简单介绍
Hibernate体系结构的简单介绍 1.SessionFactory: 单个数据库映射关系经过编译后的内存镜像,是线程安全的.它是生产Session的工厂,本身需要依赖于ConnectionPeov ...
- JMeter学习工具简单介绍
JMeter学习工具简单介绍 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态 ...
- Hibernate学习之简单应用
前言:博主在学到Spring的时候,要开始做项目了,突然觉得好像有点虚,之前学过的Hibernate框架的简单应用好像又忘记了.所以返回来,做个小笔记. 简单来讲,Hibernate框架是利用对象-关 ...
- linux视频学习(简单介绍)20160405
看一周学会linux系统的学习笔记. 1.linux系统是一个安全性高的开源,免费的多用户多任务的操作系统. 2.linux工作分为linux系统管理员,linux程序员(PC上软件开发,嵌入式开发) ...
- vue学习总结(简单介绍)
声明式渲染 Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统: <div id="app"> {{ message }} < ...
- RestfulApi 学习笔记——简单介绍(一)
前言 什么是restapi? 直接看:http://www.ruanyifeng.com/blog/2014/05/restful_api.html 阮一峰的blog,即可明白,下面是一些例子,增强理 ...
- iOS边练边学--Http网络再学习,简单介绍
一.URL 什么是URL URL中常见的协议 二.Http Http的基本通信过程 发送Http请求的方法 GET 和 POST 对比 GET 和 POST 的选择 三.iOS中的Http学习 iOS ...
- Nginx学习——Nginx简单介绍和Linux环境下的安装
一:Nginx的简介 百科百科:Nginx Nginx 是一个俄罗斯的哥们开发的,并将其进行了开源. Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器, ...
- SQL 数据库 学习 007 通过一个示例简单介绍什么是字段、属性、列、元组、记录、表、主键、外键 (上)
SQL 数据库 学习 007 通过一个示例简单介绍什么是字段.属性.列.元组.记录.表.主键.外键 (上) 我们来介绍一下:数据库是如何存储数据的. 数据库是如何存储数据的 来看一个小例子 scott ...
随机推荐
- 前段开发 jq ajax数据处理详细讲解。
定义和用法 ajax() 方法通过 HTTP 请求加载远程数据. 常用的ajax结构模板: function indes(){ $.ajax({ url: '', type: "GET&qu ...
- Manjaro/Arch linux 安装输入法
输入命令: sudo pacman -Syu fcitx fcitx-googlepinyin fcitx-im fcitx-configtool 编辑 ~/.xprofile:# xfcitxexp ...
- python解决鸡兔同笼问题
# 这个问题,是我国古代著名趣题之一. # 大约在1500年前,<孙子算经>中就记载了这个有趣的问题. # 书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足, # 问雉兔各几何 ...
- EPT和VPID简介
EPT(Extended Page Tables,扩展页表),属于Intel的第二代硬件虚拟化技术,它是针对内存管理单元(MMU)的虚拟化扩展.EPT降低了内存虚拟化的难度(与影子页表相比),也提升了 ...
- vim的操作命令
vim常用命令 在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code ...
- 关于markdown 的简单使用(已更新)
markdown的介绍 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式. Markdown具有一系列衍生版本,用于扩展Mar ...
- python蛋疼的编码decode、encode、unicode、str、byte的问题都在这了
相信很多人和我一样,被python蛋疼的编码问题纠缠不清,比如下面的 私以为出现这种错误的原因还是对一些基本的编解码概念不够熟悉,下面就说说我的理解: 首先python刚出来的时候unicode还没有 ...
- 【HTML/XML 5】使用XSL给XML文档添加样式
导读:上篇博客中以具体实例分析了HTML和XML在语义上的不同,但是,大家也都发现,XML表现出来的,并没有HTML那样直观或者说美观.其原因是因为XML的表现内容和表现形式被分离.它的表现形式有两种 ...
- POJ-2386Lake Counting,搜索题。。
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Description Due to recent rains, w ...
- codeforces Rockethon 2015 C Second price auction [想法]
传送门 C. Second price auction time limit per test 2 seconds memory limit per test 256 megabytes input ...