1.首先区别ODBC和JDBC
ODBC(OpenDatabase Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
JDBC(Java DataBase Connectivity)它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。JDBC也是Java核心类库的一部分。
JDBC的最大特点是它独立于具体的关系数据库。与ODBC类似,JDBC API 中定义了一些Java类分别用来表示与数据库的连接(Connections),SQL语句(SQL Statements),结果集(ResultSets)以及其它的数据库对象, 使得Java程序能方便地与数据库交互并处理所得的结果。使用JDBC, 所有Java程序(包括Java Applications, Applets和Servlet)都能通过SQL语句或存储在数据库中的过程(Stored Procedures)来存取数据库。
要通过JDBC来存取某一特定的数据库,必须有相应的JDBC Driver,它往往是由生产数据库的厂家提供,是连接JDBC API与具体数据库之间的桥梁。
通常,Java程序首先使用JDBC API来与JDBC Driver Manager交互,由JDBC Driver Manager载入指定的JDBC Driver, 以后就可以通过JDBC API来存取数据库。
2.JDBC, Hibernate, Mybatis各自的优缺点
JDBC:
我们平时使用JDBC进行编程,大致需要下面几个步骤:
(1)使用JDBC编程需要连接数据库,注册驱动和数据库信息。
(2)操作Connection,打开Statement对象。
(3)通过Statement对象执行SQL,返回结果到ResultSet对象。
(4)使用ResultSet读取数据,然后通过代码转化为具体的POJO对象。
(5)关闭数据库相关的资源。
JDBC的缺点:
一、工作量比较大,需要连接,然后处理JDBC底层事务,处理数据类型,还需要操Connection,Statement对象和ResultSet对象去拿数据并关闭它们。
二、我们对JDBC编程可能产生的异常进行捕捉处理并正确关闭资源。
由于JDBC存在的缺陷,在实际工作中我们很少直接使用JDBC进行编程,用的更多的是ORM对象关系模型来操作数据库,Hibernate就是一个ORM模型。
Hibernate:
Hibernate是建立在若干POJO通过XML映射文件(或注解)提供的规则映射到数据库表上的。我们可以通过POJO直接操作数据库的数据,它提供的是一种全表映射的模型。相对而言,Hibernate对JDBC的封装程度还是比较高的,我们已经不需要写SQL,只要使用HQL语言就可以了。
Hibernate的优点:
(1)消除了代码的映射规则,它全部分离到了XML或者注解里面去配置。
(2)无需在管理数据库连接,它也配置到XML里面了。
(3)一个会话中不需要操作多个对象,只需要操作Session对象。
(4)关闭资源只需要关闭一个Session便可。
这就是Hibernate的优势,在配置了映射文件和数据库连接文件后,Hibernate就可以通过Session操作,非常容易,消除了JDBC带来的大量代码,大大提高了编程的简易性和可读性。Hibernate还提供了级联,缓存,映射,一对多等功能。Hibernate是全表映射,通过HQL去操作POJO进而操作数据库的数据。
Hibernate的缺点:
(1)全表映射带来的不便,比如更新时需要发送所有的字段。
(2)无法根据不同的条件组装不同的SQL。
(3)对多表关联和复杂的SQL查询支持较差,需要自己写SQL,返回后,需要自己将数据封装为POJO。
(4)不能有效的支持存储过程。
(5)虽然有HQL,但是性能较差,大型互联网系统往往需要优化SQL,而Hibernate做不到。
Mybatis:
为了解决Hibernate的不足,Mybatis出现了,Mybatis是半自动的框架。之所以称它为半自动,是因为它需要手工匹配提供POJO,SQL和映射关系,而全表映射的Hibernate只需要提供POJO和映射关系即可。
Mybatis需要提供的映射文件包含了一下三个部分:SQL,映射规则,POJO。在Mybatis里面你需要自己编写SQL,虽然比Hibernate配置多,但是Mybatis可以配置动态SQL,解决了Hibernate表名根据时间变化,不同条件下列不一样的问题,同时你也可以对SQL进行优化,通过配置决定你的SQL映射规则,也能支持存储过程,所以对于一些复杂和需要优化性能的sql查询它就更加方便。Mybatis几乎可以做到JDBC所有能做到的事情。
3.什么时候使用Hibernate,Mybatis
Hibernate作为留下的Java ORM框架,它确实编程简易,需要我们提供映射的规则,完全可以通过IDE生成,同时无需编写SQL确实开发效率优于Mybatis。此外Hibernate还提供了缓存,日志,级联等强大的功能,但是Hibernate的缺陷也是十分明显,多表关联复杂sql,数据系统权限限制,根据条件变化的SQL,存储过程等场景使用Hibernate十分不方便,而性能又难以通过SQL优化,所以注定了Hibernate只适用于在场景不太复杂,要求性能不太苛刻的时候使用。
如果你需要一个灵活的,可以动态生成映射关系的框架,那么Mybatis确实是一个最好的选择。它几乎可以替代JDBC,拥有动态列,动态表名,存储过程支持,同时提供了简易的缓存,日志,级联。但是它的缺陷是需要你提供映射规则和SQL,所以开发工作量比Hibernate要大些。
4.JDBC,Mybatis,Hibernate的区别
(1)从层次上看,JDBC是较底层的持久层操作方式,而Hibernate和MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作。
(2)从功能上看,JDBC就是简单的建立数据库连接,然后创建Statement,将SQL语句传给Statement去执行,如果是有返回结果的查询语句,会将查询结果放到ResultSet对象中,通过对ResultSet对象的遍历操作来获取数据;Hibernate是将数据库中的数据表映射为持久层的Java对象,对SQL语句进行修改和优化比较困难;MyBatis是将SQL语句中的输入参数和输出参数映射为Java对象,SQL修改和优化比较方便.
(3)从使用上看,如果进行底层编程,而且对性能要求极高的话,应该采用JDBC的方式;如果要对数据库进行完整性控制的话建议使用Hibernate;如果要灵活使用SQL语句的话建议采用MyBatis框架。
网友评论