浅谈Hibernate

作者: Bernkastel | 来源:发表于2017-12-05 09:48 被阅读0次

大家好,我是IT修真院成都分院第7期的JAVA学员龚剑飞,一枚正直纯洁善良的java程序员。

今天给大家分享一下,一个比较好用的ORM框架————Hibernate。

1.背景介绍

先介绍下背景

Hibernate是什么?

Hibernate,翻译过来是冬眠的意思,正好现在已经进入秋季,世间万物开始准备冬眠了。其实对于对象来说就是持久化。

ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。

Hibernate的产生背景:

大多数应用程序都需要处理数据。Java应用程序运行时,往往把数据封装为相互连接的对象网络,但是当程序结束时,这些对象就会消失在一团逻辑中,所以需要有一些保存它们的方法。有时候,甚至在编写应用程序之前,数据就已经存在了,所以需要有读入它们和将其表示为对象的方法。手动编写代码来执行这些任务不仅单调乏味、易于出错,而且会占用整个应用程序的很大一部分开发工作量。

Gavin King开发hibernate的动机有两个:发现CMP太烂;赢得对老板的争执。Gavin King当时没有任何用SQL开发数据库的经验,Gavin King开发hibernate的第一件事是去街上买了本SQL基础的书

2.知识剖析

执行流程

Configuration接口:负责配置并启动Hibernate

SessionFactory接口:负责初始化Hibernate

Session接口:负责持久化对象的CRUD操作

Transaction接口:负责事务

Query接口和Criteria接口:负责执行各种数据库查询

3.常见问题

如何操作Hibernate?

4.解决方案

来给大家演示一下基本操作

5.编码实战

6.扩展思考

Mybatis同样也是非常流行的ORM框架,主要着力点在于 POJO 与 SQL 之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定 POJO 。相对Hibernate“O/R”而言,Mybatis 是一种“Sql Mapping”的ORM实现。

Hibernate优势

Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

Mybatis优势

MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

MyBatis容易掌握,而Hibernate门槛较高。

7.参考文献

CSDN博客

8.更多讨论

问:hibernate和mybatis的主要区别是什么?

答:hibernate更重,一些简单的语句不用自己写。

MyBatis要轻量化一些,sqlmapper是必须自己写的

问:讲一下orm

对象关系映射,其实就是把JAVA代码中的一个类,和数据库中的一张表相对应

问:load()和get()的区别

load是延迟加载,get是立即加载。

问:hibernate的全自动体现在什么方面

体现在如果你只用简单的语句,是不用自己写的

问:说下Hibernate的缓存机制

evit(Object obj)将指定的持久化对象从一级缓存中清除,释放对象所占用的内存资源,指定对象从持久化状态变为脱管状态,从而成为游离对象。

clear()将一级缓存中的所有持久化对象清除,释放其占用的内存资源。

contains(Object obj)判断指定的对象是否存在于一级缓存中。

flush()刷新一级缓存区的内容,使之与数据库数据保持同步。

try{/*开启一个事务*/tx=session.beginTransaction();/*从数据库中获取id="402881e534fa5a440134fa5a45340002"的Customer对象*/Customer customer1= (Customer)session.get(Customer.class, "402881e534fa5a440134fa5a45340002");

System.out.println("customer.getUsername is"+customer1.getUsername());/*事务提交*/tx.commit();

System.out.println("-------------------------------------");/*开启一个新事务*/tx=session.beginTransaction();/*从数据库中获取id="402881e534fa5a440134fa5a45340002"的Customer对象*/Customer customer2= (Customer)session.get(Customer.class, "402881e534fa5a440134fa5a45340002");

System.out.println("customer2.getUsername is"+customer2.getUsername());/*事务提交*/tx.commit();

System.out.println("-------------------------------------");/*比较两个get()方法获取的对象是否是同一个对象*/System.out.println("customer1 == customer2 result is "+(customer1==customer2));

}

customer1== customer2 result istrue

PPT


undefined_腾讯视频

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~我的邀请码:13869506,或者你可以直接点击此链接:http://www.jnshu.com/login/1/13869506

相关文章

网友评论

    本文标题:浅谈Hibernate

    本文链接:https://www.haomeiwen.com/subject/dyjqixtx.html