• 【mybatis】mybatis的特性和优势


    文章目录

    MyBatis是什么

    首先我们来说一下mybatis的什么:

    MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射) 框架,它支持定制化
    SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以
    及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和
    Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

    ORM是什么

    在介绍mybatis时提到ORM,那么ORM是什么
    ORM(Object Relational Mapping),对象关系映射,是一种为了解决关系型数据库数据
    与简单 Java 对象(POJO)的映射关系的技术。简单的说,ORM 是通过使用描述对象和数
    据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。

    为什么说Mybatis是半自动ORM映射工具

    Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象
    时,可以根据对象关系模型直接获取,所以它是全自动的。
    而 Mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为
    半自动 ORM 映射工具。

    对于传统的JDBC,MyBatis的优势有哪些

    传统 JDBC 开发存在的问题

    • 频繁创建数据库连接对象、释放,容易造成系统资源浪费,影响系统性能。可以使用连接池解决这个问题。但是使用 jdbc 需要自己实现连接池。
    • sql 语句定义、参数设置、结果集处理存在硬编码。实际项目中 sql 语句变化的可能性较大,
      一旦发生变化,需要修改 java 代码,系统需要重新编译,重新发布。不好维护。
    • 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不
      一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
    • 结果集处理存在重复代码,处理麻烦。如果可以映射成 Java 对象会比较方便。

    MyBatis解决JDBC编程的不足

    1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接
    池可解决此问题。

    解决:在 mybatis-config.xml 中配置数据链接池,使用连接池管理数据库连接。

    2、Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改
    变 java 代码。

    解决:将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。

    3、向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符
    需要和参数一一对应。

    解决: Mybatis 自动将 java 对象映射至 sql 语句。

    4、对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库
    记录封装成 pojo 对象解析比较方便。

    解决:Mybatis 自动将 sql 执行结果映射至 java 对象。

    MyBatis 的优缺点

    优点

    与传统的数据库访问技术相比,ORM 有以下优点:
    一:

    • 基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响。
    • SQL写在 XML 里,解除 sql 与程序代码的耦合,便于统一管理。
    • 提供 XML 标签,支持编写动态 SQL 语句,并可重用与 JDBC 相比,减少了 50%以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接很好的与各种数据库兼容(因为 MyBatis 使用 JDBC 来连接数据库,所以只要 JDBC 支持的数据库 MyBatis 都支持)

    二:

    • 提供映射标签,支持对象与数据库的 ORM 字段关系映射。
    • 提供对象关系映射标签,支持对象关系组件维护能够与 Spring 很好的集成

    缺点

    • SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功
      底有一定要求。
    • SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

    MyBatis 框架适用场景

    MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。
    对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis 将是不错的选择。

    Hibernate 和 MyBatis 的区别

    相同点

    都是对 jdbc 的封装,都是持久层的框架,都用于 dao 层的开发。

    不同点

    映射关系

    • MyBatis 是一个半自动映射的框架,配置 Java 对象与 sql 语句执行结果的对应关系,多表
      关联关系配置简单
    • Hibernate 是一个全表映射的框架,配置 Java 对象与数据库表的对应关系,多表关联关系
      配置复杂

    SQL 优化和移植性

    • Hibernate 对 SQL 语句封装,提供了日志、缓存、级联(级联比 MyBatis 强大)等特性,此外还提供 HQL(Hibernate Query Language)操作数据库,数据库无关性支持好,但会多消耗性能。如果项目需要支持多种数据库,代码开发量少,但 SQL 语句优化困难。
    • MyBatis 需要手动编写 SQL,支持动态 SQL、处理列表、动态生成表名、支持存储过程。
      开发工作量相对大些。直接使用 SQL 语句操作数据库,不支持数据库无关性,但 sql 语句
      优化容易。

    开发难易程度和学习成本

    • Hibernate 是重量级框架,学习使用门槛高,适合于需求相对稳定,中小型的项目,比如:
      办公自动化系统。
    • MyBatis 是轻量级框架,学习使用门槛低,适合于需求变化频繁,大型的项目,比如:互
      联网电子商务系统。

    结尾

    综上所述
    MyBatis 是一个小巧方便高效简单直接半自动化的持久层框架,
    Hibernate 是一个强大方便高效复杂间接全自动化的持久层框架。

  • 相关阅读:
    word如何生成目录亲测有用 转
    软件测试之Web测试流程和方法
    SpringBoot
    【Redis】第5讲 Redis的下载并安装
    CSS居中对齐 (水平垂直居中对齐)
    软件测试谈薪技巧:同为测试人员,为什么有人5K,有人 20K?
    土豆便宜了吗?python可视化显示价格数据
    算法笔记(3)—— 快速 I/O 算法:快速输入算法、快速输出算法
    在 AWS EKS 上部署 EMQX MQTT 集群
    React之Hook
  • 原文地址:https://blog.csdn.net/Bejpse/article/details/126553255