JDBC与Hibernate

用AI生成React/Vue页面?实测Locofy等5款工具,教你选最适合的 本文深度评测了2024年五大AI生成前端页面工具,包括Locofy、Builder.io等,从代码质量、可视化编辑器成本到企业级落地方案进行全面分析。通过实测数据和实战案例,揭示如何利用AI生成技术高效创建React/Vue页面,提升开发效率并优化性能。 阅读详情

0. 什么是ODBC?

ODBC是Open Database Connect即开放式数据库互连的简称,它是由Microsoft公司于1991年提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。

用于提高数据库的独立性,避免程序中直接调用与数据库相关的操作。

结构如下:

GUI <----> ODBC <----> DB(CRUD)


1. 什么是JDBC?

JDBC就是JAVA版本的ODBC.

GUI/APP <----> JDBC <----> DB(CRUD) 

JDBC 主要对象和一般处理流程:

DriverManager
Connection

Statement

ResultSet


他们的关系就是:

    Connection con = DriverManager.getConnection(
                         "jdbc:myDriver:myDatabase",
                         username,
                         password);

    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");

DriverManager 连接到数据库,并创建一个Connection对象,来管理整个连接过程和lifecycle,Connection对象会创建 Statement;

Statement主要用于管理 sql 语句的执行,执行的结果放入ResultSet中。

ResultSet主要用于管理执行结果。

    while (rs.next()) {
        int x = rs.getInt("a");
        String s = rs.getString("b");
        float f = rs.getFloat("c");
    }

JDBC访问数据库的主要步骤:

第一步:注册驱动  
第二步:创建连接(Connection) 
第三步:创建SQL语句(Statement)  
第四步:执行SQL语句,得到结果集(ResultSet) 
第五步:处理结果集 第六步:释放资源


对sqlite操作等简单封装时,也可以参照JDBC的方式,并简化,将Connection与Statement合并。

sqlite一般应用于嵌入式单机系统,open_sqlite可以看做是Connection一直open的状态。


PreparedStatement 需要指明参数列表,包括参数的位置和值。

参数替换

打印出完整的sql语句

#{first_parameter}


使用字符串替换

2. 什么是Hibernate?

Hibernate是对JDBC的轻量级封装。

http://www.tutorialspoint.com/hibernate/hibernate_examples.htm


使用Hibernate创建程序的步骤如下:

Make sure you have set PATH and CLASSPATH appropriately before proceeding for the compilation and execution.

  • Create hibernate.cfg.xml configuration file as explained in configuration chapter.

  • Create Employee.hbm.xml mapping file as shown above.

  • Create Employee.java source file as shown above and compile it.

  • Create ManageEmployee.java source file as shown above and compile it.

  • Execute ManageEmployee binary to run the program.


而使用Hibernate的接口,访问数据库的步骤包括:

第一步:创建Configuration

Configuration

第二步:由Configuration 创建 SessionFactory

SessionFactory

第三步:由factory创建Session

Session

第四步:session对数据库进行操作

createQuery
beginTransaction
get
update
第五步:释放资源

 session.close(); 


有关Hibernate与JDBC的比较,有人做了很详细的总结:

这里转载一下:

========== 转载 ======

一、 Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。


二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。


三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而 不是Entity Bean的替代者出现的:


传统的架构: 
      1) Session Bean <-> Entity Bean <-> DB


为了解决性能障碍的替代架构:
      2) Session Bean <-> DAO <-> JDBC <-> DB


使用Hibernate来提高上面架构的开发效率的架构:
     3) Session Bean <-> DAO <-> Hibernate <-> DB

就上面3个架构来分析:
           1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。


           2、运行效率: 如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构表现出最快的运行效率。 EB的架构效率会差的很远。


           3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EB架构很可能会失败。


           4、分布式,安全检查,集群,负载均衡的支持 由于有SB做为Facade,3个架构没有区别。


JDBC与Hibernate在性能上相比,JDBC灵活性有优势。而Hibernate在易学性,易用性上有些优势。当用到很多复杂的多表联查和复杂的数据库操作时,JDBC有优势。


相同点:

◆两者都是JAVA的数据库操作中间件。

◆两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。

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


不同点:


◆使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate使用的是HQL(Hibernate query language)语言

◆操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。

◆数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。


JDBC与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缓冲。最终结论:


由于MySQL的JDBC驱动的重大缺陷,使得测试结果变得毫无意义,不具备任何参考价值,只是我们能够大概判断出一些结论:
一、精心编写的JDBC无论如何都是最快的。

二、Hibernate List和Iterator适用的场合不同,不存在孰优孰劣的问题

我个人认为Hibernate Iterator是JDBC Result的封装,Hibernate List是Scrollable Result的封装,所以我推测,如果在Oracle或者DB2上面做同样的Read测试,如果结果集小于FetchSize,4者在速度上应该都不会有差别;如果结果集大于FetchSize的话,但是不是FetchSize的很多倍,速度排名应该是:

JDBC Scrollable Result (消耗时间最少) < Hibernate List < JDBC Result < Hibernate Iterator

如果结果集非常大,但是只取结果集中的部分记录,那么速度排名:

JDBC Result < Hibernate Iterator < JDBC Scrollable Result < Hibernate List


为了避免造成误导,我最后强调一下我的结论:


一、“精心编写”的JDBC一定是性能最好的

实际上,不管CMP,Hibernate,JDO等等,所有的ORM都是对JDBC的封装,CMP则是一个重量级封装,JDO中度封 装,Hibernate是轻量级的封装。从理论上来说,ORM永远也不可能比JDBC性能好。就像任何高级语言的运行性能永远也不会好过汇编语言一个道 理。

对于Create和Update操作来说,由于普通的Java程序员未必会使用JDBC的Batch的功能,所以Hibernate会表现出超过JDBC的运行速度。

对于Read的操作来说,ORM普遍都会带有双层缓冲,即PrepreadStatement缓冲和ResultSet缓冲,而JDBC本身没有缓冲机制,在使用连接池的情况下,一些连接池将会提供PrepreadStatement缓冲,有的甚至提供ResultSet缓冲,但是普遍情况下,Java程序员一般都不会考虑到在写JDBC的时候优化缓冲,而且这样做也不太现实,所以在某些情况下,ORM会表现出超过JDBC的Read速度。

二、Hibernate List和Iterator方式的比较

JDBC与Hibernate在测试中想要重点考察的方面是 List与Iterator,但是由于JDBC驱动问题,结果变的很不可信,不过仍然可以得到一些有用的结论。

Read操作包括两步:第一步是把数据库的数据取出,构造结果集,把数据放入到结果集中;第二步是遍历结果集,取每行数据。

List 方式是1次性把所有的数据全部取到内存中,构造一个超大的结果集,主要的时间开销是这一步,这一步的时间开销要远远超过JDBC和 Iterator方式下构造结果集的时间开销,并且内存开销也很惊人;而对结果集的遍历操作,速度则是非常的惊人(从上面的测试结果来看,30万记录的内存遍历不到100ms,由于这一步不受JDBC影响,因此结果可信)。因此,List方式适合于对结果集进行反复多次操作的情况,例如分页显示,往后往前遍历,跳到第一行,跳到最后一行等等。


Iterator方式只取记录id到内存中,并没有把所有数据取到内存中,因此构造结果集的时间开销很小,比JDBC和List方式都要少,并且内存开销也小很多。而对结果集的遍历的操作的时候,Iterator仍然要访问数据库,所有主要的时间开销都花在这里。因此,Iterator方式适合于只对结果集进行1次遍历操作的情况,并且Iterator方式特别适合于从超大结果集中取少量数据,这种情况Iterator性能非常好。


另外Iterator方式可以利用JCS缓冲,在使用缓冲的情况下Iterator方式的遍历操作速度将不受数据库访问速度的影响,得到彻底的提升。Hibernate Iterator JCS方式应该是最快的,Hibernate List速度与JDBC比较接近,而Hibernate Iterator速度还是慢的离谱。另外JDBC和List受到Fetch Size的影响很大,当Fetch Size大于50的时候,速度有非常显著的提升,而Hibernate Iterator的速度似乎不受Fetch Size的影响

=======

从零到千兆:KSZ9031 PHY芯片在Zynq PS端的驱动移植心路历程 本文详细记录了在Xilinx Zynq-7000平台(基于XC7Z020芯片)上,为KSZ9031千兆以太网PHY芯片移植LwIP协议栈驱动的完整过程。从硬件连接配置、Vivado工程设置到LwIP库的深度修改调试,分享了解决PHY识别、自协商及性能优化等关键问题的实战经验,助力开发者实现稳定的千兆网络连接。 阅读详情

相关推荐

JDBC数据库编程实验

一、实验目的: (1)熟练掌握JDBC操作数据库的整个过程; (2)利用预处理语句操作数据库; (3)掌握可滚动和可更新的结果集的基本操作方法; (4)理解JDBC中实现事务处理的基本方法; (5)理解数据库连接池的基本原理和思想,学会在tomcat服务器中配置数据库连接池,并掌握从连接池中获取连接的基本方法。 (6)初步理解数据访问层的基本设计方法,理解web的分层架构。

HibernateJDBC的区别

HIbernate:   1.概念:ORMapping (对象关系映射)     1)操作数据库的框架,底层是通过JDBC操作数据库的     2)用面向对象的方式操作数据库   2.JDBC的缺点:     1)代码繁琐     2)不是面向对象的数据库操作     3)资源关闭的代码也很繁琐     4)没有做到数据库缓存     5)移植性比较差(MySQL无法移植到Oracle)    JDBC优点:     1)因为是底层操作所以效率高        3.Hibernat

aiwokache的博客 803

JDBCHibernate区别

JDBCHibernate在性能上相比,JDBC灵活性有优势。而Hibernate在易学性,易用性上有些优势。当用到很多复杂的多表联查和复杂的数据库操作时,JDBC有优势。 相同点: ◆两者都是JAVA的数据库操作中间件。 ◆两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。 ◆两者都可以对数据库的更新操作进行显式的事务处理。 不同点: ◆使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate使用的是HQL(Hibernate query language)语言 ◆操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。 ◆数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法数据库中的值保持一致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。 JDBCHibernate读取性能 。 。 。 。 。 。 。 。

jdbc

jdbc是什么? java database connectivity (java数据库连接)是一组接口,之所以会有它,就是使用java操作各种数据库hibernate是ORM框架,它封装了jdbc,使程序员以更加简单的方式开发数据访问层,使开发中不再出现重复冗余的代码。 mysql-connector-java-5.1.40-bin.jar就是由mysql官方实现的驱动,jar包实现

share_free的博客 2378

hibernate

hibernatejdbc对比 jdbc缺点     1、编程的时候很繁琐,用的try和catch比较多     2、jdbc没有做数据的缓存     3、没有做到面向对象编程     4、sql语句的跨平台性很差 jdbc的优点     效率比较高 hibernate的优点        1、完全的面向对象编程        2、hibernate的缓存很牛的,一级

qzquuu的博客 249

数据库操作【JDBC & HIbernate & Mybatis】

jdbc,mybatis,hibernate

菜鸟零号 kungfu~peng 880

jdbc,mybatis,hibernate的区别联系

1.jdbc开发 1)优点:简单易学,上手快,非常灵活构建SQL,效率高2)缺点:代码繁琐,难以写出高质量的代码(例如:资源的释放,SQL注入安全性等)开发者既要写业务逻辑,又要写对象的创建和销毁,必须管底层具体数据库的语法(例如:分页)。3)适合于超大(千万级)批量数据的操作,速度快  2. hibernate单表开发1)优点:不用写SQL,完全以面向对象的方式设计和访问,不用管底层具体数据库的...

qq_28863045的博客 1218

hibernatejdbc

二者的的关系: JDBC是java应用程序连接数据库,进行数据存取的一种机制,是一组用java语言编写的类和接口的API,它和数据库之间由各个厂商提供的数据库驱动进行关联。 HibernateJDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App  Server,和EJB没有什么必然的联系 相同点: 两者都是 JAVA 的数据库操作中间件。  

xh2的专栏 533

hibernatejdbc分页

对于hibernate而言 只需要Query对象调用两个方法 1.setFirstResult();   表示数据是从哪一条记录开始,一般设值为   (每页的显示数据数目 - 1)* 当前页数 2.setMaxResult();  表示每页显示的数据条数。 对于JDBC而言 也十分简便 需要引入一个CachedRowSet 对象,来处理 ResultSet ,然后给它设置每页的显示

万豪给给的博客 527

JDBCHibernate的区别

JDBCHibernate在性能上相比,JDBC灵活性有优势。而Hibernate在易学性,易用性上有些优势。当用到很多复杂的多表 联查和复杂的数据库操作时,JDBC有优势。 相同点: 1、两者都是JAVA的数据库操作中间件。 2、两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。 3、两者都可以对数据库的更新操作进行显式的事务处理。 不同点: 1、使用的SQL语言

qiangzi9009的专栏 938

HibernateJDBC的区别,Hibernate的三种状态以及状态的转换

一、HibernateJDBC的区别1、hibernatejdbc主要区别就是,hibernate先检索缓存中的映射对象( 即hibernate操作的是对象),而jdbc则是直接操作数据库.2、HibernateJDBC的轻量级的对象封装,它是一个独立的对象持久层框架。Hibernate可以用在任何JDBC可以使用的场合3、Hibernate是一个和JDBC密切关联的框架,所以Hiberna...

yuanaili的博客 968

sqljdbc42.jar、sqljdbc41.jar 更新日期2017-12-21

sqlserver数据库,Driver驱动jar包,最新官方原版。 sqljdbc41.jar、sqljdbc42.jar 解压后对应在jar7、jar8的文件夹中。

Hibernate3作为一个JDBC框架

作者:Gavin King翻译:ChiKai                  最近围绕着简单的JDBC框架,像iBATIS,总有一些喧闹声。就我个人观点,在一个只有单一事务,实体间有着难懂的关联图,而且并不需要面向对象的域模式的应用,我自己是喜欢iBATIS的。假如你正在进行解决一些“极愚蠢的”遗留数据库问题的工作,一个JDBC框架也是可以产生强的判断力的。ORM的解决方案更趋向于假定那些同样具

chikai On The Java Road 1745

分析hibernatejdbC的优缺点

hibernatejdbC都是操作数据库的框架,那么既然有了jdbC,为什么又要学习hibernate呢? 首先我们先来了解一下它们各自的优缺点。 jdbC: 缺点: 1、查询语句比较繁琐 注:因为使用jdbC查询语句的时候,要把数据封装在ResultSet中,而且读取里面的数据还要判断里面是否有内容。2、在关闭资源的时候,本来就是在finally里面关闭资源,但是在finally代码块

3425

HibernateJDBC的区别

1.hibernatejdbc主要区別就是,hibernate縣檢索緩存中的映射對象( 即hibernate操作的是對象),而jdbc則是直接操作数据库.2.HibernateJDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合3.Hibernate是一个和JDBC密切关联的框

ooPGao的专栏 1011

JDBC、MyBatis、Hibernate的区别

JDBC 1.使用JDBC编程需要链接数据库,注册驱动和数据库信息。 2.操作Connection,打开Statement对象。 3.通过Statement执行SQL语句,返回结果放到ResultSet对象。 4.使用ResultSet读取数据。 5.关闭数据库相关的资源。 JDBC缺点: 工作量比较大,需要连接,然后处理jdbc底层事务,处理数据类型,还需要操作Conne...

weixin_30892763的博客 229

详解JDBCHibernate区别

_________ _________ JDBCHibernate区别 首先:JDBC一点都不Low,惯性思维的我们总是对他有很大的偏见,认为它应该退出江湖了,这也是我原来的想法,直到后来仔细的研究了下两者的区别 JDBCHibernate在性能上相比,JDBC灵活性有优势。而Hibernate在易学性,易用性上有些优势。当用到很多复杂的多表联查和复杂的数据库操作时,JDBC有优势...

熊仙森滴Blog 777

HibernateJDBC区别

1、hibernatejdbc主要区别就是,hibernate先检索缓存中的映射对象( 即hibernate操作的是对象),而jdbc则是直接操作数据库。 2、HibernateJDBC的轻量级的对象封装,它是一个独立的对象持久层框架。Hibernate可以用在任何JDBC可以使用的场合。 3、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数...

weixin_44483327的博客 750

HibernateJDBC的优缺点

由于菜鸟我该出去找工作,所以找了一些面试题看看,有一道题是:请谈谈hibernatejdbc的优缺点。挺简单又挺不好回答的一道题,它上面给的回答看的我一头雾水,越看越晕,上网搜了一下,大都是如此。所以自己就按照自己的理解总结一下。说的不足的地方,请高手指点迷津,非常感谢。   二者的联系: JDBC是java应用程序连接数据库,进行数据存取的一种机制,是一组用java语言编写的类和接口的A...

王二北的个人博客 392

STM32模拟SPI操作ADS869x

分享一个自己写的STM32模拟SPI操作ADS869x的程序,程序实际验证可行;如果大家发现Bug,欢迎一起讨论讨论。文档中包含ADS869x.c和ADS869x.h介绍 ADS869x 支持可编程双极输入范围的 18 位高速单电源 SAR ADC 数据采集系统– ADS8691: 1MSPS– ADS8695: 500kSPS– ADS8699: 100kSPSADS869x 器件属于集成数据采集系统系列, 均基于逐次逼近 (SAR) 模数转换器(ADC)。 此类器件采用高速高精度 SAR ADC、 集成模拟前端 (AFE) 输入驱动器电路、 高达 ±20V 的过压保护电路以及一个温度漂移极低的 4.096V 片上基准。广泛应用于测试和测量和电池组监视。程序中包含了基本的读写操作,和低功耗模式配置。TI官方地址:http://www.ti.com.cn/product/cn/ADS8699

上一篇: Login, cookie, session等概念理解
下一篇: sourcetree 及git版本工具使用
viewcode
博客等级 码龄15年 993粉丝 108原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值