java必备——经典的Hibernate
在编程开发中,我们有非常多框架,他们有些非常方便,也非常有用,今天我们一起来认识一个java经典的框架Hibernate,Hibernate英文名称为“冬眠”。这是个非常有意思的技术,相同这个名字也非常巧妙!
大家先看看这个技术的书籍在国外的封面:
简单介绍:
大家知道冬眠的动物是精巧的,在冻僵的边缘,而Hibernate的一个巨大作用就是对数据持久化的实现。这两者有什么联系?
简介数据持久化:
数据持久化是解决程序与数据库之间交互訪问的问题,使程序不直接訪问数据库,而是直接訪问Session会话,然后由Session会话与数据库“打交道”。
仅仅要确保,程序每次訪问Session中的数据时,与数据库中的数据保持一致,就不会出现错误。
而冬眠的功效就会由这个Session会话体现,我们的程序不直接面对数据库,延迟(冬眠)到Session会话,我们能够将Session会话理解为缓存!
你好奇吗?这个实现是怎么完毕的呢?
我们先宏观上看看他的神奇面纱:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHZzaHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
而我们看看採用ORM之后的优点和缺点
长处:
1,提高生产力——轻松开发
2,更加对象化——消除关系领域——阻抗不匹配
3,可移植性——请
4,没有侵入性——測试简单,支持透明持久化
缺点:
1,数据库特性语句——难调优
2,对大批量数据更新有问题
3,系统中存在大量统计查询——混合应用
而在此,Hibernate对我们最大的帮助就是使我们採用对象化思维操作关系型数据库!
思考:
这是新技术吗?
这不是新技术。仅仅是某个人对这个技术的实现做得比較完好,适合大部分的开发者。在时间的作用力下。逐步推广。Hibernate就貌似是个独立的技术,事实上我们在VB的阶段就接触过这类的思想。我们在VB编写某机房收银系统时,在一个特殊的模块封装了对数据库的系列操作。包含获取ODBC连接。释放连接等,这时我们已经对数据库的操作做了一个简单的封装。
到了C#阶段,我们个人重构和合作开发期间,我们不只做到了VB对数据库连接的封装,我们对表的操作也做了一系列的封装。大家看看这个类图:
对照:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHZzaHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
而在Hibernate中。我们看看他的结构:
我们发现,在学习Hibernate时。这项技术,是我们想对象化操作数据库,而不用考虑详细结构的一个非常好实现,我们曾经的自己实现的能够说是Hibernate的一个雏形。而在Hibernate中,除了这些,另一个不错的技术体现了他冬眠的另一层含义:
延迟载入
这样的初始化策略仅仅在一个对象调用它的一对多或多对多关系时才将关系对象读取出来。这个过程对开发人员来说是透明的,并且仅仅进行了非常少的数据库操作请求,因此会得到比較明显的性能提升。
自己理解:
他的这样的技术。是将数据库的封装好的关系在使用对象调用时,延迟载入,仅仅有我调用了这个关系,我才会载入关系附属的那些对象,这样,假设我们仅仅使用一个对象,就不会调用关系映射给他的对象!
生活中的映射:
这些技术在生活中的有应用吗?这必定是有应用的。或许你想不到,我们天天在用!
一个最简单的样例,开会,我们在生活中,每一个小区都会有居委会,每一个城区都会有区级管理机构,国家开会,会有各级人大代表,而这些机制就是我们延迟载入的一个映射,比方A县城下有B,C,D三个城区。市里布置任务,A县代表去开会,带着B.C.D三个城区的代表。市里有任务是对A说的,除非详细到某个城区。否则BCD就不用出现。而一旦有详细任务,详细到某个区,仅仅要暂时叫到会议室就OK了!
总结:
Hibernate,这首先是个单词,在生活中有它实际的含义。然后才是某项技术的名字或者叫代号,而这两者必定有着千丝万缕的联系,而他的由来也必定有一个巧妙的故事,我们不识Hibernate是应为以为他是新技术。我们认识Hibernate,是学过后认为他不识新技术,我们使用Hibernate是由于他较好地攻克了我们的难题!
总之,这个技术的兴起。不是由于太新颖。而是我们太熟悉。太渴望!
java必备——经典的Hibernate的更多相关文章
- [转帖]java必备的开发知识和技能
java必备的开发知识和技能 https://blog.csdn.net/qq_34405062/article/details/89389646 学习一下java 其实上学那会儿学的 早就过时加落伍 ...
- JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结
我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...
- java三大框架之一hibernate使用入门
综述:Hibernate的作用就是让实体类与数据库映射,使数据持久化,用于替代JDBC,使我们不致于写那么多sql语句代码. 1. 首先在官网www.hibernate.org下载hibernate包 ...
- java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration解决方法
Autowiring of fields failed; nested exception is...........Error creating bean with name 'siteOperat ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataProvider
Caused by: java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/MetadataProvi ...
- HibernateProxy异常处理 java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
这里使用google的Gson包做JSON转换,因为较早的1.4版本的FieldAttributes类中没有getDeclaringClass()这个方法,这个方法是获取field所属的类,在我的排除 ...
- java必备基础知识(一)
学习的一点建议: 每一门语言的学习都要从基础知识开始,学习是一个过程,"万丈高楼平地起",没有一个好的地基,想必再豪华的高楼大厦终究有一天会倒塌.因此,我们学习知识也要打牢根基,厚 ...
- Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...
随机推荐
- Redis源代码解析:13Redis中的事件驱动机制
Redis中.处理网络IO时,採用的是事件驱动机制.但它没有使用libevent或者libev这种库,而是自己实现了一个很easy明了的事件驱动库ae_event,主要代码只400行左右. 没有选择l ...
- mysql union和union all 的差别以及使用
Union由于要进行反复值扫描,所以效率低.假设合并没有刻意要删除反复行,那么就使用Union All 两个要联合的SQL语句 字段个数必须一样.并且字段类型要"相容"(一致). ...
- struts.xml 文件添加DTD文件
在编辑struts.xml 文件时,“alt + /”无提示信息,需要在myeclipse 中添加消息头中的文件,步骤如下: 1. 选中该段复制 2. Preferences——>XML Cat ...
- Android Shell Cmd
1. view android version: grep ro.build.version.sdk= system/build.prop getprop ro.build.version.relea ...
- IE6—在链接click事件的响应函数中发送jsonp请求不生效
$("#link").click(function(){ $.ajax({ type: 'GET', dataType: 'jsonp', ...
- python selenium --处理下拉框
下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再定位到下拉框内里的选项. drop_down.html <html&g ...
- Josephus排列
思考与分析: 对于m为常数,能够用循环链表,用head,tail标志头尾指针使其易于表示循环结构.循环输出后删除结点n次,每次外层循环时.内层都固定循环m次.所以执行时间为O(mn)=O(n). 对于 ...
- Jetty - Container源码分析
1. 描述 Container提供管理bean的能力. 基于Jetty-9.4.8.v20171121. 1.1 API public interface Container { // 增加一个bea ...
- Atitit.分区对索引的影响 分区索引和全局索引 attilax总结
Atitit.分区对索引的影响 分区索引和全局索引 attilax总结 1. 分区的好处1 2. 分区键:2 3. 分区的建议:2 4. 分区索引和全局索引:2 5. 全局索引就是在全表上创建索引, ...
- JS事件类型详解
一般事件 onclick IE3.N2 鼠标点击时触发 此事件 ondblclick IE4.N4 鼠标双击时触发 此事件 onmousedown IE4.N4 按下鼠标时触发 此事件 onmouse ...