Hibernate 和JDBC的区别

一 序言

HIbernate:

  1.概念:ORMapping (对象关系映射)

    1)操作数据库的框架,底层是通过JDBC操作数据库的

    2)用面向对象的方式操作数据库

  2.JDBC的缺点:

    1)代码繁琐

    2)不是面向对象的数据库操作

    3)资源关闭的代码也很繁琐

    4)没有做到数据库缓存

    5)移植性比较差(MySQL无法移植到Oracle)

   JDBC优点:

    1)因为是底层操作所以效率高

    

  3.Hibernate

    1)代码比较精简

    2)是面向对象的数据库操作

    3)只需要关闭一个对象就可以了(关闭Session)

    4)数据缓存 (一级缓存、二级缓存、查询缓存)

    5)移植性比较好

  缺点:

    1)程序员无法控制SQL语句的生成 (HQL语句可以手写SQL语句)

    2)一个项目对SQL语句优化特别高,HIbernate则不适合

    3)如果一张表的数据量特别大,则不适合HIbernate

 ====================数据库和实体类的映射文件=============================

============================hIbernate.cfg.xml的配置文件========================================

=======================hIbernate需要的包===============================================

动态代理模式:JDK的动态代理(proxy)代理对象是在内存中产生的本质上字节码生成的一个对象。

javassist.jar: 字节码jar包。类似于产生动态代理对象的机制。主要操作字节码文件的。和Java虚拟机直接相关的jar包(HIbernate的延迟加载用到)

二 查询的语言

        1、JDBC使用的是基于关系型数据库的标准SQL语言。

        2、 Hibernate使用的是HQL(Hibernate query language)语言、面向API的条件查询(Criteria Queries)、Native SQL查询。

三 操作的对象

        1、JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行。

        2、Hibernate操作的是瞬时、持久化、托管对象,最终由底层持久化对象的数据更新到数据库中。

四 数据状态不同

        1、JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一致。

        2、Hibernate操作的数据是可持久的(Hibernate的数据有瞬时、持久化、托管状态),其中持久化对象的数据属性的值是可以跟数据库中的值保持一致的。

五 事务

        1、两者都可以对数据库的更新操作进行显式的事务处理。

六 缓存机制

        1、Hibernate提出了多种缓存机制(一级缓存、二级缓存、查询缓存),这样可以使访问数据的效率提高很大。

        2、jdbc没有缓存机制。

七 移植性

        1、JDBC依赖于数据库,即需要为不同的数据库编写不同的代码

        2、Hibernate是独立于数据库的,相同的代码可以对许多数据库进行细微的更改。

八 性能(优化)

        1、JDBC仍然是最快的访问方式,不论是Create还是Read操作,精心编写的JDBC无论如何都是最快的。

        2、Hibernate使用uuid.hex构造主键,性能稍微有点损失,但是不大。

        3、Create操作,JDBC在使用批处理的方式下速度比Hibernate快,使用批处理方式耗用JVM内存比不使用批处理方式要多得多。        

        4、读取数据,Hibernate的Iterator速度非常缓慢,因为他是每次next的时候才去数据库取数据,这一点从观察任务管理器的java进程占用内存的变化也可以看得很清楚,内存是几十K几十K的增加。

        5、读取数据,Hibernate的List速度很快,因为他是一次性把数据取完,这一点从观察任务管理器的java进程占用内存的变化也可以看得很清楚,内存几乎是10M的10M的增加。

        6、JDBC读取数据的方式和Hibernate的List方式是一样的(这跟JDBC驱动有很大关系,不同的JDBC驱动,结果会很不一样),这从观察java进程内存变化可以判断出来,由于JDBC不需要像Hibernate那样构造一堆Cat对象实例,所以占用JVM内存要比Hibernate的List方式大概少一半左右。

        7、Hibernate的Iterator方式并非一无是处,它适合于从大的结果集中选取少量的数据,即不需要占用很多内存,又可以迅速得到结果。另外Iterator适合于使用JCS缓冲。最终结论:

九 参考

        1、博客园 详解JDBC与Hibernate区别 - 愚蠢的程序员 - 博客园 (cnblogs.com) https://www.cnblogs.com/wuxu/p/10571769.html

        2、csdn (35条消息) Hibernate:入门及与JDBC优劣比较_熊诗言的博客-CSDN博客 https://blog.csdn.net/xxssyyyyssxx/article/details/50125077

        3、博客园 Hibernate 和JDBC的区别 - 樊聪 - 博客园 (cnblogs.com)        https://www.cnblogs.com/fancongcong/p/8836086.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值