zoukankan      html  css  js  c++  java
  • JDBC和hibernate,mybatis的比较

    在学习使用mybatis之前,先比较下jdbc编程和hibernate编程各自的优缺点。

       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所有能做到的事情。

    什么时候使用Hibernate,Mybatis

        Hibernate作为留下的java orm框架,它确实变成简易,需要我们提供映射的规则,完全可以通过IDE生成,同时无需编写sql确实开发效率优于Mybatis。此外Hibernate还提供了缓存,日志,级联等强大的功能,但是Hibernate的缺陷也是十分明显,多表关联复杂sql,数据系统权限限制,根据条件变化的sql,存储过程等场景使用Hibernate十分不方便,而性能又难以通过sql优化,所以注定了Hibernate只适用于在场景不太复杂,要求性能不太苛刻的时候使用。

        如果你需要一个灵活的,可以动态生成映射关系的框架,那么Mybatis确实是一个最好的选择。它几乎可以替代jdbc,拥有动态列,动态表名,存储过程支持,同时提供了简易的缓存,日志,级联。但是它的缺陷是需要你提供映射规则和sql,所以开发工作量比hibernate要大些。

  • 相关阅读:
    Spring MVC- 表单提交
    Ajax提交与传统表单提交的区别说明
    CSS各种居中方法
    Android RecyclerView 使用完全解析 体验艺术般的控件
    如何解决VMware上MAC虚拟机不能上网问题
    input标签的hidden属性的应用及作用
    SpringMVC表单标签简介
    EL显示List里嵌套map(Spring MVC3)返回的model
    Spring3 MVC请求参数获取的几种方法
    写数据到文件,并同步到磁盘
  • 原文地址:https://www.cnblogs.com/sxjblogs/p/8510335.html
Copyright © 2011-2022 走看看