一 序言
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