二者的联系:

JDBC是java应用程序连接数据库,进行数据存取的一种机制,是一组用java语言编写的类和接口的API,它和数据库之间由各个厂商提供的数据库驱动进行关联。

hibernate是一个开源的轻量级的ORM框架,它在底层对jdbc进行了封装。

优点:

hibernate的最主要的几个优点是:

一、hibernate可以让开发人员以面相对象的思想来操作数据库。jdbc只能通过SQL语句将元数据传送给数据库,进行数据操作。而hibernate可以在底层对元数据和对象进行转化,使得开发者只用面向对象的方式来存取数据即可。

二、hibernate使用xml或JPA的配置以及数据库方言等等的机制,使得hibernate具有更好的移植性,对于不同的数据库,开发者只需要使用相同的数据操作即可,无需关心数据库之间的差异。而直接使用JDBC就不得不考虑数据库差异的问题。

三、hibernate提供了大量的封装(这也是它最大的缺点),很多数据操作以及关联关系等都被封装的很好,开发者不需写大量的sql语句,这就极大的提高了开发者的开发效率。

四、hibernate提供了缓存机制(session缓存,二级缓存,查询缓存),对于那些改动不大且经常使用的数据,可以将它们放到缓存中,不必在每次使用时都去查询数据库,缓存机制对提升性能大有裨益。

缺点:

一、有时优点也即缺点,对hibernate而言,它对JDBC封装过于厉害,所以就失去了对SQL的控制(当然hibernate也可以使用native sql既使用createSQLQuery等方法来调用与数据库相关的sql,但这样一来也就影响了hibernate的可移植性),使得hibernate的在很多地方不够灵活,难于优化,尤其对于一些复杂的关联查询时,hibernate提供的功能远不及直接使用JDBC方便性能更高。

二、hibernate没有提供专门的批处理机制,如果要批量更新或插入数据时,还需要显示的flush,clear之类的操作,性能不如JDBC。

三、相对于JDBC,hibernate更消耗内存,因为它每次的数据库操作都要做数据和对象的转换/封装,查询出一条数据就要创建一个或多个对象,这样也太消耗内存了。

四、hibernate提供了很多好处,但这些好处本身就是陷阱(如proxy陷阱等),开发者如果不注意就会调入陷阱而不知,这样就可能会出现一些无法排查的异常情况,比如程序表面上看着毫无错误,可就是达不到预期的效果,而且并无异常抛出,断点排查也不一定能找到症结所在,这将是非常令人抓狂的一件事!!!!!

Hibernate与JDBC的优缺点相关推荐

  1. hibernate和jdbc的优缺点,概述

    1.分析hibernate和jdbc的优缺点 jdbc的优点和缺点 缺点 1.查询代码特别繁琐 2.重复性代码特别多,频繁的try,catch 3.没有做到数据的缓存 4.sql的移植性不好(mysq ...

  2. 简述 Hibernate 和 JDBC 的区别、优缺点

    1.hibernate是一个开源的.采用面向对象的思想实现ORM映射框架,它对jdbc进行了一层封装,对于数据库的连接.关闭.数据的持久化(增删改查).事务的管理都进行了封装,使得程序开发的时候可以用 ...

  3. Hibernate和JDBC、EJB比较

    参考:http://m.blog.csdn.net/article/details?id=7228061 一.Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App S ...

  4. spring 同时配置hibernate and jdbc 事务

    http://blog.csdn.net/mypop/article/details/6120377 在项目中同时用到了JDBC和Hibernate,分别配置了各自的事务,同时配置了不同的tx:ann ...

  5. 我们如何意外地将Hibernate的JDBC流量增加了一倍

    这篇文章描述了我最近使用Hibernate ORM的经验. 多年以来,该框架并没有让我感到惊讶,您可能会在使用它时遇到性能问题. 我以为我已经看完了,但是这次我又措手不及了. 该问题的基础是在对一个完 ...

  6. 作为一个程序员,hibernate和jdbc 有什么不一样的点,你知道吗

    1.hibernate和jdbc主要区别就是,hibernate先检索缓存中的映射对象( 即hibernate操作的是对象),而jdbc则是直接操作数据库. 2.Hibernate是JDBC的轻量级的 ...

  7. org.hibernate.TransactionException: JDBC begin transaction failed的解决方法

    异常: javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException ...

  8. Hibernate与JDBC、EJB、JDO的比较

    常用的数据库操作包括:JDBC.EJB.JDO以及Hibernate.它的各有优缺点: (1) JDBC:多数Java开发人员是用JDBC来和数据库进行通信,它可以通过DAO模式进行改善和提高.但这种 ...

  9. 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

最新文章

  1. 浅谈 nagios监控配置
  2. 51nod 1275 连续子段的差异
  3. Python学习笔记:TypeError: not all arguments converted during string formatting
  4. python写excel标记文字颜色_python3使用xlwt时写入文档字体颜色和边框样式
  5. C语言中无符号数和有符号数相加问题
  6. centos 系统管理维护指南
  7. ubuntu的home目录下,Desktop等目录消失不见
  8. python 格式化输出%和format
  9. 换了一个皮肤,心情也好多了
  10. 浅谈java.awt使用过程中遇到的问题
  11. 《完美软件》笔记8:如何应对防卫反应
  12. 在线文本按列截取工具
  13. python3file函数_Python3 File(文件) 方法
  14. EDA技术实用教程 | 复习十一 | 状态机的特点和分类
  15. web测试要点及基本方法
  16. QT项目六:简易客户信息管理系统
  17. ideaIU-2017.3.4安装破解图文教程详细步骤
  18. Qt获取键盘按键ctrl和alt以及shift按键按下和松开
  19. 阿里云验证码与通知短信
  20. Quarkus 1.3.0.Final修复了Kubernetes本机Java堆栈中的错误

热门文章

  1. bootstrapTable Rows
  2. 重磅!银保监会开展侵害个人信息权益乱象专项整治工作
  3. TestFlight 测试
  4. 圣诞节怎么能缺少圣诞树呢?Python+HTML打造专属于你的圣诞树
  5. OpenGL中把设备坐标系(屏幕)的原点转为左上方的调整方法(使用glOrtho2D函数,合理设置参数)
  6. ORACLE数据库查询表名及表备注,字段名及字段备注SQL
  7. mysql游标卡尺干嘛用的_卡尺的具体作用是什么?
  8. hdu1418 抱歉(多面体欧拉公式)
  9. JAVA 堆栈的区别
  10. 【IoT】创业:如何找到可以主导的创业市场?