Hibernate进化史-------Hibernate概要
一个、Hibernate概要
什么是Hibernate呢?首先,Hibernate是数据持久层的一个轻量级框架。实现了ORMapping原理(Object Relational Mapping)。
在说hibernate之前,简单说一下什么是ORM。
ORMapping基本相应规则:(这是查到的一些资料,有些规则。还没有考究)
1:类跟表相相应
2:类的属性跟表的字段相相应
3:类的实例与表中详细的一条记录相相应
4:一个类能够相应多个表。一个表也能够相应对个类
5:DB中的表能够没有主键。可是Object中必须设置主键字段
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系
7:Object中属性的个数和名称能够和表中定义的字段个数和名称不一样
ORMapping的基本实现方式:
使用JDBC,用SQL来操作数据库,仅仅是看动态生成还是人工写代码来实现。
大家想想,我们曾经是怎么做的?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3lvbmd4aWE5MjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
如今Hibernate做了什么呢??它做了下图工作
如上图:Hibernate主要用来实现Java对象和表之间的映射,同一时候提供訪问数据的CRUD方法,取代手工书写SQL语句的繁琐,降低拼写错误。这样在非常大程度上降低了开发过程人工使用SQL和JDBC处理数据的时间。
适用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,而其它的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件里。
5、消除数据库差异。(事实上能够说这是ORM的长处)Hibernate能够帮助你消除或者包装那些针对特定厂商的SQL代码。而且帮你把结果集从表格式的表示形式转换到一系列的对象去。
当然数据持久层的框架有非常多比方:iBATIS,myBatis,Nhibernate,Siena等等。
Hibernate的还有一面
不论什么一个事物存在两面性,不可能十全十美,即使如此优秀的Hibernate也有自己的弱点。
首先是Hibernate不适用的范围。有例如以下两点:
1、若是大量数据批量操作。
则不适合使用Hibernate。
2、而且一个持久化对象不能映射到多张表中。
其次是“抽象”带来的“职业病”,抽象就以为这“通用性”好。那么可想而知。对于“特殊”情况。hbibernate就不擅长了。
Hibernate的特长是封装太好,所以,假设想要操作适用于某类型数据库的特性,就仅仅能“saysorry”了。
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的目标是对于开发人员通常的数据持久化相关的编程任务,解放当中的95%。
对于以数据为中心的程序来说,它们往往仅仅在数据库中使用存储过 程来实现商业逻辑,Hibernate可能不是最好的解决方式;对于那些在Java的应用程序的中间层。他们面向对象的应用程序的业务模型和业务逻辑。Hibernate它是最实用。
主要概念和核心接口已经出台,也许对于,请听下回分解。
请指正。
Hibernate进化史-------Hibernate概要的更多相关文章
- 问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found解决方法
问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not fo ...
- Hibernate笔记——Hibernate介绍和初次环境配置
Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate ...
- org.hibernate.HibernateException: /hibernate.cfg.xml not found等三个问题
初次配置hibernate在myeclipse上: 出现三个问题,怎么都不好使,比对代码,没有问题,查看路径还是没有问题: 1.org.hibernate.HibernateException: /h ...
- Hibernate之Hibernate环境搭建
Hibernate之Hibernate环境搭建 一.Hibernate环境搭建的步骤 1.添加Hibernate && SQLServer 的Jar antlr-2.7.7.jar d ...
- 【hibernate】Hibernate中save, saveOrUpdate, persist, merge, update 区别
Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原 ...
- 【hibernate】hibernate和mybatis的比较
理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉 ...
- 【Hibernate】Hibernate的多表查询
在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的 ...
- Hibernate→ 《Hibernate程序开发》教材大纲
Hibernate ORM 概览 Hibernate 简介 Hibernate 架构 Hibernate 环境 Hibernate 配置 Hibernate 会话 Hibernate 持久化类 Hib ...
- hibernate配置文件hibernate.cfg.xml和.hbm.xml的详细解释
原文地址:http://blog.csdn.net/qiaqia609/article/details/9456489 hibernate.cfg.xml -标准的XML文件的起始行,version= ...
随机推荐
- PS 过滤器——运动模糊
%%%%% motion blur clc; clear all; close all; Image=imread('4.jpg'); Image=double(Image); theta=pi/4 ...
- java 面试题汇总(未完成)
版权声明:本文博客原创文章,博客,未经同意,不得转载.
- Html.Partial和Html. RenderPartial用法
Html.Partial和Html. RenderPartial用法 Html.partial和RenderPartial的用法与区别Html.partial和RenderPartial都是输出htm ...
- tortoisegit使用密钥连接服务器(转)
目录 [hide] 1 使用putty的密钥 1.1 生成putty密钥 2 在服务器上添加openssh公钥 3 在tortoisegit上使用密钥 4 putty密钥与openssh密钥转化 5 ...
- PYTHON单元测试
PYTHON开发入门与实战11-单元测试 1. 单元测试 本章节我们来讲讲django工程中如何实现单元测试,单元测试如何编写以及在可持续项目中单元测试的重要性. 下面是单元测试的定义: 单元测试是开 ...
- oracle 监控执行的sql语句
oracle 监控执行的sql语句 select * from v$sqlarea a where module='PL/SQL Developer' order by a.FIRST_LOAD_TI ...
- Ubuntu 14.1 构造NFS
主办IP:129.1.4.189.目标计算机IP:129.1.22.96 1.运行命令:apt-get install nfs-kernel-server ; 2.运行命令:mkdir /tftpbo ...
- HDU 5281 Senior's Gun (贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5281 贪心题目,但是看看我的博客里边相关贪心的题解实在是少的可怜,这里就写出来供大家一起探讨. 题意还 ...
- AJAX 怎样在一个UpDatePanel中刷新另一个updatePanel
原文:AJAX 怎样在一个UpDatePanel中刷新另一个updatePanel 在页面上(.aspx)<asp:UpdatePanel ID="MyID1" runat= ...
- hdu 3449 (有依赖的01背包)
依赖背包 事实上,这是一种树形DP,其特点是每个父节点都需要对它的各个儿子的属性进行一次DP以求得自己的相关属性. fj打算去买一些东西,在那之前,他需要一些盒子去装他打算要买的不同的物品.每一个盒子 ...