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= ...
随机推荐
- App山寨疯狂 爱加密Apk加密平台防破解
App山寨疯狂 爱加密Apk加密平台防破解,Android系统由于其开源性,眼下已占领全球智能机近80%的市场,远超微软的WP系统和苹果的IOS系统.然而也正是由于开源性,Android盗版App在国 ...
- Android AIDL使用特定的解释
1.什么是aidl:aidl这是 Android Interface definition language缩写,认清,这是android进程间通信接口的叙事语言描述.通过它我们可以定义进程间通信接口 ...
- 【leetcode】Clone Graph(python)
类似于二叉树的三种遍历,我们能够基于遍历的模板做非常多额外的事情,图的两种遍历,深度和广度模板相同也能够做非常多额外的事情,这里举例利用深度优先遍历的模板来进行复制,深度优先中,我们先訪问第一个结点, ...
- 模仿QQ截图片
原文:模仿QQ截图片 两个picturebox,一个放图片 完整代码如下 using System; using System.Collections.Generic; using System.Co ...
- C++在stack的deque实现
本文实现STL在stack大部分功能,同时加入了许多功能. 请注意以下几点: 1.Stack它是一个适配器,在底部vector.list.deque等实现 2.Stack不含有迭代器 在本例中, ...
- Codeforces Round #191 (Div. 2)---A. Flipping Game
Flipping Game time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- cocos2d-x 3.1.1 学习笔记[4]GridActions 网格动画
文章写的 http://blog.csdn.net/zhouyunxuan 老样子.见代码. //GridActions can only used on NodeGrid auto nodeGri ...
- 各大oj题目分类(转)
POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006POJ1008POJ1013POJ1 ...
- Debug和Release的不同
1. 变量. 大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值近似于随机(我想是直接从内存中分配的,没有 ...
- 基于Linux平台病毒BlackHole病毒的决心
今天会见了病毒,少量的代码,但在使用小漏洞的函数的,真正的杀伤力相当惊人. 转载请注明出处:http://blog.csdn.net/u010484477谢谢^_^ watermark/2/text/ ...