Jdbc、Mybatis、Hibernate各自优缺点及区别

文章出处:Jdbc,Mybatis,Hibernate各自优缺点及区别html

先比较下jdbc编程和hibernate编程各自的优缺点。java

一、JDBC程序员

   咱们平时使用jdbc进行编程,大体须要下面几个步骤:
   一、使用jdbc编程须要链接数据库,注册驱动和数据库信息;
   二、操做Connection,打开Statement对象;
   三、经过Statement对象执行SQL,返回结果到ResultSet对象;
   四、使用ResultSet读取数据,而后经过代码转化为具体的POJO对象;
   五、关闭数据库相关的资源。
   
  Jdbc的缺点:
     一、工做量比较大,须要链接,而后处理jdbc底层事务,处理数据类型,还须要操做Connection,Statement对象和ResultSet对象去拿数据并关闭他们。
      二、咱们对jdbc编程可能产生的异常进行捕捉处理并正确关闭资源。
 
   因为JDBC存在的缺陷,在实际工做中咱们不多直接使用jdbc进行编程,用的更多的是ORM对象关系模型来操做数据库,Hibernate就是一个ORM模型。

sql

二、Hibernate数据库

       Hibernate是创建在若干POJO经过xml映射文件(或注解)提供的规则映射到数据库表上的。咱们能够经过POJO直接操做数据库的数据,他提供的是一种全表映射的模型。相对而言,Hibernate对JDBC的封装程度仍是比较高的,咱们已经不须要写SQL,只要使用HQL语言就能够了。
    
    Hibernate的优势:
    一、消除了代码的映射规则,它所有分离到了xml或者注解里面去配置。
    二、无需在管理数据库链接,它也配置到xml里面了。
    三、一个会话中不须要操做多个对象,只须要操做Session对象。
    四、关闭资源只须要关闭一个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全部能作到的事情。
 编程

四、何时使用Hibernate,Mybatis?缓存

    Hibernate做为留下的Java orm框架,它确实编程简易,须要咱们提供映射的规则,彻底能够经过IDE生成,同时无需编写sql确实开发效率优于Mybatis。此外Hibernate还提供了缓存,日志,级联等强大的功能,
    可是Hibernate的缺陷也是十分明显,多表关联复杂sql,数据系统权限限制,根据条件变化的sql,存储过程等场景使用Hibernate十分不方便,而性能又难以经过sql优化,因此注定了Hibernate只适用于在场景不太复杂,要求性能不太苛刻的时候使用。
    若是你须要一个灵活的,能够动态生成映射关系的框架,那么Mybatis确实是一个最好的选择。它几乎能够替代jdbc,拥有动态列,动态表名,存储过程支持,同时提供了简易的缓存,日志,级联。
    可是它的缺陷是须要你提供映射规则和sql,因此开发工做量比hibernate要大些。
 
 
五、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框架。性能

相关文章
相关标签/搜索