MyBatis与JDBC和Hibernate的比较

             Mybatis学习(-)---了解多用ORM框架

  本主要介绍 Java ORM 的来源历史 别介绍 JDBC Hibernate MyBatis访数据在分析优缺点 础上 们之间的 区别和

1、传统的JDBC

  Java 程序都是通过 JDBC (Java Data Base  Connectivity    连接数据库的,这样我们就可 以通过 SQL 对数据库编程。JDBC 是由 SUN 公司 SUN 公司后被 Oracle 公司收购〉 提出 列规据库厂商去实现 因为每个数据库都有其特殊性,这些是 Java 规范没有办法确定的,所以 JDBC 就是一种典 型的桥接模式。

传统的JDBC 编程的使用给我们带来了连接数据库的功能,但是也引发了 巨大的问题。

 

public class JDBCExample {
  public static final String URL = "jdbc:mysql://localhost:3306/imooc";
  public static final String USER = "liulx";
  public static final String PASSWORD = "123456";

  public static void main(String[] args) throws Exception {
    //1.加载驱动程序
    Class.forName("com.mysql.jdbc.Driver");
    //2. 获得数据库连接
    Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
    //3.操作数据库,实现增删改查
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
    //如果有数据,rs.next()返回true
    while(rs.next()){
      System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));
    }
  }
}

1.2 JDBC执行流程

从代码中我们可以看出整个过程大致分为以下几步

  • 使用 JDBC   编程需要连接数据库,注册驱动和数据库信息。
  • Connection Statement
  • 通过 Statement SQL 返回结果到 ResultSet 象。
  • 使用 ResultSet 读取数据,然后通过代码转化为具体的 POJO 对象
  • 库相

1.3 传统JDBC问题

  •   工作相对较大我们需要先连接 ,然 后处理 JDBC 层事务 ,处理数据类型。我们还需要操作 Connection 对象、Statement 对象 ResultSet 对象去拿到数据 ,并准确关闭它们。
  •   需要对JDBC这种方式产生的异常进行正确的捕获并正确的关闭资源

3、ORM 模型

  由于 JDBC 存在的缺陷,在实际工作中我们很少使用 JDBC 进行编程 ,于是提出了对 象关系映射 C Object Relational Mapping ,简称 ORM ,或者 O/RM ,或者 O/R mapping 什么是 ORM 模型呢?

简单地说 ORM 模型就是数据库的表和简单 Java 对象 Plain Ordinary Java Object, 简称 POJO 的映射关系模型,它主要解决数据库数据和 POJO 对象的相互映射我们通过 这层映射关系就可以简单迅速地把数据库表的数据转化为 POJO,以便程序员更加容易理解 和应用 Java  程序

  

 

 

 

  有了 ORM 模型,在大部分情况下,程序员只需要了解 Java 应用而无需对数据库相关深入 便写出通ORM 使得数据 库的数据通过配置便可轻易映射到 POJO

 

4、Hibernate简介

Hibernate 是由 Gavin King 于 2001 年创建的开放源代码的对象关系框架。它强大且高效的构建具有关系对象持久性和查询服务的 Java 应用程序。

Hibernate 将 Java 类映射到数据库表中,从 Java 数据类型中映射到 SQL 数据类型中,并把开发人员从 95% 的公共数据持续性编程工作中解放出来。

Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基于 O/R 映射机制和模式的那些对象。

image

4.1 Hibernate 优势

  • Hibernate 使用 XML 文件来处理映射 Java 类别到数据库表格中,并且不用编写任何代码。
  • 为在数据库中直接储存和检索 Java 对象提供简单的 APIs。
  • 如果在数据库中或任何其它表格中出现变化,那么仅需要改变 XML 文件属性。
  • 抽象不熟悉的 SQL 类型,并为我们提供工作中所熟悉的 Java 对象。
  • Hibernate 不需要应用程序服务器来操作。
  • 操控你数据库中对象复杂的关联。
  • 最小化与访问数据库的智能提取策略。
  • 提供简单的数据询问。

4.2 Hibernate 劣势

  •   全表映射带来的不方便,查询每次都是查询表中所有字段(表一共有上百个字段,如果你只需要两个),每次更新都对所有字段进行update
  •   无法根据不同条件组装不同的sql
  •   对多表关联和复杂的sql支持较差,需要手写sql,需要自己将放回数据组装成pojo
  •   不能有效支持存储过程
  •   虽有hql,但新能较差

5、MyBatis

  MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)

  

 

   5.1 MyBatis 优势

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
  • 解除sql与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql

   5.2 MyBatis劣势

 

  • 编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
  • SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
  • 框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
  • 二级缓存机制不佳
posted @ 2020-08-06 14:32  crazy_boy  阅读(399)  评论(0编辑  收藏  举报