Hibernate一个简短的引论
我们从几个方面进行阐述Hibernate
When? What ?
How?
When?
Hibernate由来是因为当时EJBBean1.1在处理entittBean架构时,花费的时间要比业务逻辑很多其它并且限制也太多。
Gavin King。一个充满激情,脾气倔强。不言败的人,在2001花费了两年时间,开发出了称为全世界流行的O/R Mapping的
工具。
What?
了解了历史,再看看Hibernate是什么?
Hibernate是一个对象关系映射(ORM)框架,它对JDBC进行了很轻量级的对象封装,使得能够使用对象编程思维
来操纵数据库。看到这里应该了解到Hibernate也是一个持久层框架。
ORM的简单规则:
类跟表相应
类属性与表字段相应
类实例与表中详细一条记录相应
一个类可与多个表相应,一个表也可相应多个类
DB中表与表之间的关系(如:外键)映射成为Object之间的关系
How?
Hibernate都给我们做了哪些,怎样体现它的长处
Hibernate有6大接口
Session、SessionFactory、Transaction、Query、Criteria和Configuration
接口间关系
(图片引自http://blog.csdn.net/jiuqiyuliang/article/details/39078749)
自上而下的调用
1Configuration接口:负责配置并启动Hibernate,创建SessionFactory对象。
在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
2SessionFactroy接口:负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。
- 它是线程安全的,这意味着它的同一个实例能够被应用的多个线程共享。
- 它是重量级的,这意味着不能任意创建或销毁它的实例。假设应用仅仅訪问一个数据库,仅仅须要创建一个SessionFactory实例
3Session接口:负责运行被持久化对象的CRUD操作(CRUD:增读更删)。
但须要注意的是Session对象是非线程安全的。因此在设计软件架构的时候,应该避免多个线程共享一个Session实例。同一时候,Hibernate的session不同于JSP应用中的HttpSession。
4Query和Criteria接口:Query和Criteria接口负责运行各种数据库查询。它能够使用HQL语言或SQL语句两种表达方式。
5Transaction接口:是Hibernate的数据库的数据库事务接口,它对底层的事务接口做了封装。
底层事务接口包含:
- 1.jdbc API
- 2.JTA(JAVA Transation API)
- 3.CORBA(Common Object Request Broker Architecture) API
不论什么事物都有两面,Hibernate也不例外
Hibernate长处:
- 使用简单介绍的hql语句,如插入数据:原来的做法是:insert into 表名称 alue(值1。值2。值3,……),而如今的做法是:save(对象)。
- 简化了DAO层编码工作。使开发更对象化了
- 移植性好,支持各种数据库,假设换个数据库仅仅要在配置文件里变换配置就能够了,不用改变hibernate代码
- 支持透明持久化。透明是针对上层而言的
Hibernate缺点:
- 若是大量数据批量操作。则不适合使用Hibernate。
- 复杂表操作就Over了
小结:
了解了Hibernate的来源,以及它的工作原理和优缺点。
相信不会再说Hibernate不了解了吧。对于ORM的框架,有多种,如:Nhibernate,Entity,EJB.我们首先要了解整体,细节一定会明确的,可是不能一下子就扎进去了。
Hibernate简单介绍你了解么?
版权声明:本文博主原创文章,博客,未经同意不得转载。
Hibernate一个简短的引论的更多相关文章
- Saiku一个简短的引论
一个简短的引论 Saiku成立于2008年,通过Tom Barber和Paul Stoellberger研究. 最初叫Pentaho分析工具.最初是基于OLAP4J图书馆的使用GWT采用前端分析工具包 ...
- HSQL一个简短的引论
前言 在对dao层写測试类的时候,我们须要一个測试数据库,一般我们会是专门建立一个真实的測试数据库,可是有了HSQLDB事情就变得简单了起来. 正题 一.简单介绍: hsql数据库是一款纯Ja ...
- Jsoup一个简短的引论——采用Java抓取网页数据
转载请注明出处:http://blog.csdn.net/allen315410/article/details/40115479 概述 jsoup 是一款Java 的HTML解析器,可直接解析某个U ...
- Mybatis之ResultMap一个简短的引论,关联对象
基础部分能够查看我的还有一篇博客http://blog.csdn.net/elim168/article/details/40622491 MyBatis中在查询进行select映射的时候.返回类型能 ...
- Spark第一个研究笔记1一片 - Spark一个简短的引论
该公司推出的在线项目Spark拥有近1随着时间的推移.有效,Spark事实上,优秀的分布式计算平台,以提高生产力. 开始本篇笔记.此前的研究会Spark研究报告共享出来(由于篇幅的限制,它将被划分成制 ...
- Cache基础知识OR1200在ICache一个简短的引论
以下摘录<步骤吓得核心--软-core处理器的室内设计与分析>一本书 12.1 Cache基本知识 12.1.1 Cache的作用 处理器的设计者通常会声称其设计的处理器一秒钟能做多少次乘 ...
- HTML5分析实战WebSockets一个简短的引论
HTML5 WebSockets规范定义了API,同意web页面使用WebSockets与远程主机协议的双向通信. 介绍WebSocket接口,并限定了全双工通信信道,通过套接字网络. HTML5 W ...
- Oracle 指数 一个简短的引论
1 索引创建语法: CREATE UNIUQE | BITMAP INDEX <schema>.<index_name> ON <schema>.< ...
- PL/SQL一个简短的引论
前言 文本 PL/SQL (Procedure Language,程序语言)SQL 1999主要的数据库供应商提供结构化的共同语言 PL/SQL只有支持Oracle数据库 基本的语法 多行凝视 ...
随机推荐
- 调用WCF的异步方法
原文:调用WCF的异步方法 AsyncCallback aLoginCallback = delegate(IAsyncResult result) { var aSystemUser = WcfCl ...
- Android利用Get、Post 获取网络数据
首先是Get: 布局非常easy.就一个button,主要看一下MainActivity吧: package com.francis.httpget; import android.app.Activ ...
- const void *a 与 void *const a 的差别
const void *a 这是定义了一个指针a,a能够指向随意类型的值,但它指向的值必须是常量. 在这样的情况下,我们不能改动被指向的对象,但能够使指针指向其它对象. 比如: const void ...
- WampServer:轻松配置Wordpress安装环境
WordPress运行环境 PHP 5.2.4 或更新版本(不支持第三方推出的“PHP 6.0”) MySQL 5.0 或更新版本 Apache mod_rewrite 模块(可选,用于支持“固定链接 ...
- Oracle大数据量查询实际分析
Oracle数据库: 刚做一张5000万条数据的数据抽取,当前表同时还在继续insert操作,每分钟几百条数据. 该表按照时间,以月份为单位做的表分区,没有任何索引,当前共有14个字段,平均每个字段3 ...
- 为应用程序池“XX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误
场景 WCF应用程序部署在IIS7中,使用net.tcp协议对外给几百台客户端提供服务,应用程序池不断崩溃重启. 分析过程 在事件查看器中看到的错误信息类似于 为应用程序池“XX”提供服务的进程在与 ...
- HTML CSS——background的认识(一)
今天回归bug时无意间看到了样式表中background属性,如今总结一下: 1.background-color:设置元素的背景色.其值能够为:color-name.color-rgb.color- ...
- HDU2647-Reward(拓扑排序)
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 编辑简单的 shell程序
编辑简单的 shell程序 知道了vi编辑器的使用规则之后,结合shell的使用规则,可以编辑简单的 shell程序试试手 题目如下: 1.用while语句创建一个根据输入的数值求累加和(1+2+3+ ...
- == 和 equal
==比较是地址 equal比较的是值 Integer r1 = new Integer(900);//定义r1整型对象 Integer r2 = new Integer(900);//定义r2整型对象 ...