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= ...
随机推荐
- .NET单元测试艺术(2) - 第一个单元测试
List 2.1 使用[SetUp]和[TearDown]特性 using System; using System.Collections.Generic; using System.Linq; u ...
- linux VIM基本命令
linux VIM命令: vim 在命令行中输入vim,进入vim编辑器 Esc 退出i(插入)命令进行其他命令使用 :sh 进入shell命令行,运行完命令后ctrl+d退出又一次进入vim编辑继续 ...
- Java魔法堂:注解用法详解——@SuppressWarnings(转)
一.前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWar ...
- Base64中文不能加密问题
最近用到了Base64.js来对url参数进行加密,字母和数字都可以很好地加密/解密. 但测试中文时发现不能进行转换,貌似Base64.js不支持中文字符. 联想到encodeURI()对url的编码 ...
- $.ajax()详解
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...
- Angularjs,WebAPI 搭建一个简易权限管理系统
Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一) 1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 Web ...
- 一个IIS网站的异常配置的安全解决方案
一个.如下面的错误: "/"应用server错. 安全异常 说明: 应用程序试图运行安全策略不同意的操作.要授予此应用程序所需的权限.请与系统管理员联系,或在配置文件里更改该应用程 ...
- AspNetPager使用指南
一.AspNetPager支持两种方式分页: 一种是PostBack方式分页, 一种是通过Url来实现分页以及Url重写功能 二.AspNetPager支持各种数据绑定控件GridView.DataG ...
- ArcEngine载入中SDE问题栅格数据
当直接加载矢量数据到IFeatureWorkspace接口可,但是,在装载门格当要传送的数据IRasterWorkspaceEx接口. 效果如下面的,对可以被添加到双击Globe在. watermar ...
- Python的html和xml解析库Beautiful Soup
网站:http://www.crummy.com/software/BeautifulSoup/ 版权声明:本文博主原创文章,博客,未经同意不得转载.