什么是Hibernate?

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。

总结:Hibernate是一个轻量级的JDBC封装,也就是说,我们可以使用Hibernate来完成原来我们使用JDBC完成的操作,也就是与数据库的交互操作。它是在dao层去使用的。


为什么要用Hibernate?

  1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
  2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
  3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
  4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

Hibernate的优点与缺点?

优点:

  • 更加对象化:以对象化的思维操作数据库,我们只需要操作对象就可以了,开发更加对象化。
  • 移植性:因为Hibernate做了持久层的封装,你就不知道数据库,你写的所有的代码都具有可复用性。
  • Hibernate是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。对比Struts的Action和ActionForm,都需要继承,离不开Struts。Hibernate不需要继承任何类,不需要实现任何接口。这样的对象叫POJO对象。测试更加方便,提高了效率。

缺点:

  • 由于对持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活使用JDBC的原生SQL,Hibernate封装了JDBC,所以没有JDBC直接访问数据库效率高。要使用数据库的特定优化机制的时候,不适合用Hibernate。
  • 框架中使用ORM原则,导致配置过于复杂,一旦遇到大型项目,配置文件和内容是非常庞大的,另外DTO满天飞,性能和维护问题随之而来。
    如果项目中各个表中关系复杂,表之间的关系很多,在很多地方把lazy都设置false,会导致数据查询和加载很慢,尤其是级联查询的时候。
  • Hibernate在批量数据处理时有弱势,对于批量的修改,删除,不适合用Hibernate,这也是ORM框架的弱点。

什么是ORM?

对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
所谓的ORM就是利用描述对象和数据库表之间映射的元数据,自动把Java应用程序中的对象持久化到关系型数据库的表中。通过操作Java对象,就可以完成对数据库表的操作。可以把ORM理解为关系数据和对象中的一个纽带,开发人员只需关注纽带一端映射的对象即可。


Hibernate的作用

1、hibernate是一种ORM(对象映射)框架的持久性框架, 它是对JDBC做了轻量级的封装, 使得程序员可以面向对象思维的对数据库进行操作。

2、支持各种关系数据库,它的级联功能很好的支持着表与表之间的各种关系。

3、与spring整合之后连接数据库的代码和控制事物的代码都统一,由spring管理,简化了代码,以及更好的管理事物。

4、hibernate提供一级和二级缓存的功能,极大的提高了性能。
  
5、hibernate提供方便的API进行CURD,减轻了大量SQL语句的编写。

简而言之:Hibernate对原来的SQL语句进行了封装,以前写很多SQL语句,现在你在保存的时候直接可以用 SAVE(对象)来实现了。原来是对表操作,现在是对对象操作!!


Hibernate核心接口

  • session:负责被持久化对象CRUD操作
  • sessionFactory:负责初始化hibernate,创建session对象
  • configuration:负责配置并启动hibernate,创建SessionFactory
  • Transaction:负责事物相关的操作
  • Query和Criteria接口:负责执行各种数据库查询

Hibernate的工作原理

1.通过Configuration config = new Configuration().configure(); // 读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的读取并解析映射信息
3.通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
4.Session session = sf.openSession();//打开Sesssion
5.Transaction tx = session.beginTransaction();//创建并启动事务Transation
6.persistent operate操作数据,持久化操作
7.tx.commit();//提交事务
8.关闭Session
9.关闭SesstionFactory

Hibernate简介与运行原理相关推荐

  1. Spark大数据技术与应用 第一章Spark简介与运行原理

    Spark大数据技术与应用 第一章Spark简介与运行原理 1.Spark是2009年由马泰·扎哈里亚在美国加州大学伯克利分校的AMPLab实验室开发的子项目,经过开源后捐赠给Aspache软件基金会 ...

  2. Servlet简介及其运行原理

    Servlet简介及其运行原理: 1.Servlet是什么?     Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或者其他HTTP客户端的请求和HTTP上 ...

  3. LoadRunner系统架构简介与运行原理

    1.LoadRunner系统架构简介 LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP ...

  4. php yii框架原理,Yii框架快速入门[Yii简介及运行原理]

    Yii是一个基于组件.用于开发大型 Web 应用的 高性能 PHP 框架.采用严格的 OOP 编写,Yii 使用简单,非常灵活,具有很好的可扩展性.Yii官方下载 包含特性 1. MVC.DAO/Ac ...

  5. 10分钟了解Flutter跨平台运行原理!

    导语 | 本文将从选型.简介和运行原理三大部分为你介绍Flutter的相关概念,希望能站在框架设计和实现原理的高度,带领大家去理解Flutter区别其他跨平台解决方案的关键所在. 一.为什么选择Flu ...

  6. fusion 360安装程序的多个实例正在同时运行。_SpringMVC运行原理

    1. spring mvc简介与运行原理 Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的 ...

  7. [原]iBatis.Net(C#)系列一:简介及运行环境

    转载请注明http://www.cnblogs.com/13590/archive/2013/02/27/2934580.html 摘要:介绍iBatis.Net的基本情况和运行原理,运行环境中各参数 ...

  8. MyBatis框架 基本配置及运行原理

    MyBatis(半自动,轻量级)简介 原名iBatis,2013年迁移到gitHub,sql与Java编码分离,sql是开发人员控制 PS:对于JDBC,sql夹杂在java代码块中,耦合度高导致编码 ...

  9. flink运行原理_浅谈Flink分布式运行时和数据流图的并行化

    本文将以WordCount的案例为主线,主要介绍Flink的设计和运行原理.关于Flink WordCount程序可以参考我之前的文章:读取Kafka实时数据流,实现Flink WordCount.阅 ...

  10. java字节码运行原理_JVM 内部原理(六)— Java 字节码基础之一

    JVM 内部原理(六)- Java 字节码基础之一 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ...

最新文章

  1. Eclipse的安装与使用
  2. 证书到期了_注意!出口沙特所有扁钢制品证书将于8月26日到期 ,需要强制QM
  3. wpf项目源代码_C# WPF开源控件库:MahApps.Metro
  4. 虚拟函数的静态决议 和 RTTI 小例子
  5. java 自定义tostring_Java 怎么写这个自定义class的toString方法?
  6. mybatis-plus的概念
  7. PAT 1042. 字符统计
  8. Scott Hanselman 喊你来看看最新的极简APII
  9. insert---插入记录
  10. 【剑指offer】面试题30:包含min函数的栈(Java)
  11. 诗与远方:无题(六十七)- 张国荣,想你
  12. linux端口转发_详解Linux网桥功能--概念、工作机制、相关命令及实例说明
  13. SQLAlchemy orm.query.Query
  14. 自动生成java代码_自动生成代码
  15. 华为自带计算机怎么算平方立方,智能家庭中心:华为荣耀立方体验评测
  16. RestSharp介绍
  17. VOC2007数据集解析
  18. java excel 水印_Java下载文件加文字水印(Excel、PDF、图片)
  19. NTC功率型热敏电阻
  20. Linux基础到进阶(一)Linux基础命令、输入输出错误重定向、目录分类与作用、vi编辑器

热门文章

  1. 概率图模型(PGM)学习笔记(五)——模板模型
  2. LIBSVM使用方法及参数设置
  3. 【PRML 学习笔记】第三章 - 线性回归模型 (Linear Models for Regression)
  4. 【Gym-101775 C】Traffic Light【思维】
  5. 【bug:鳄梨】【上线前修改其他bug急着提交造成的bug】
  6. nginx服务无法停止(Windows)
  7. Passware Kit Enterprise破解版下载及使用方法
  8. Cordova - 彻底搞定安卓中的微信支付插件!
  9. cmockery库详解
  10. ASP.NET WEB API简介