Bombax's Knowledge Document Notes Bombax's Knowledge Document Notes
首页
  • 前置

    • 尚硅谷Java学习
    • 基础软件安装与配置
  • 核心

    • Java从入门到精通(JDK17版)
    • MySQL从入门到高级-基础篇
    • MySQL从入门到高级-高级篇
    • JDBC 核心技术(JDK21版)
    • JavaWeb 技术
  • 学习笔记

    • POJO 概念
  • Spring Cloud

    • SpringCloud
    • SpringCloud-Alibaba
  • 持久层框架

    • MyBatis
    • MyBatis-Plus
  • 相关知识

    • Mybatis 代码生成工具比较
  • 安全框架

    • 安全框架之 Spring Security
    • 安全框架之 Shiro
  • 定时任务框架

    • 定时任务框架之 Quartz
    • 定时任务框架之 XXL-JOB
  • Java 日志热门框架
  • Git 常用命令
  • Swagger API 文档生成工具
  • Motan RPC (opens new window)
  • Lombok Tutorial (opens new window)
  • Lombok Features (opens new window)
  • FastJSON2 (opens new window)
  • Spring Framework 5 中文文档 (opens new window)
  • XStream (opens new window)
  • fluent-validator 业务逻辑验证框架 (opens new window)
  • ehcache java 缓存框架 (opens new window)
  • jetcache java 缓存框架 (opens new window)
  • caffeine 缓存框架 (opens new window)
  • Spring Cache (opens new window)
  • 主流缓存框架调研 (opens new window)
  • redisson 官方中文文档 (opens new window)
  • LiquiBase 中文学习指南 (opens new window)
  • LiquiBase 官方文档 (opens new window)
  • 分类
  • 归档
GitHub (opens new window)

bombax

小小程序猿
首页
  • 前置

    • 尚硅谷Java学习
    • 基础软件安装与配置
  • 核心

    • Java从入门到精通(JDK17版)
    • MySQL从入门到高级-基础篇
    • MySQL从入门到高级-高级篇
    • JDBC 核心技术(JDK21版)
    • JavaWeb 技术
  • 学习笔记

    • POJO 概念
  • Spring Cloud

    • SpringCloud
    • SpringCloud-Alibaba
  • 持久层框架

    • MyBatis
    • MyBatis-Plus
  • 相关知识

    • Mybatis 代码生成工具比较
  • 安全框架

    • 安全框架之 Spring Security
    • 安全框架之 Shiro
  • 定时任务框架

    • 定时任务框架之 Quartz
    • 定时任务框架之 XXL-JOB
  • Java 日志热门框架
  • Git 常用命令
  • Swagger API 文档生成工具
  • Motan RPC (opens new window)
  • Lombok Tutorial (opens new window)
  • Lombok Features (opens new window)
  • FastJSON2 (opens new window)
  • Spring Framework 5 中文文档 (opens new window)
  • XStream (opens new window)
  • fluent-validator 业务逻辑验证框架 (opens new window)
  • ehcache java 缓存框架 (opens new window)
  • jetcache java 缓存框架 (opens new window)
  • caffeine 缓存框架 (opens new window)
  • Spring Cache (opens new window)
  • 主流缓存框架调研 (opens new window)
  • redisson 官方中文文档 (opens new window)
  • LiquiBase 中文学习指南 (opens new window)
  • LiquiBase 官方文档 (opens new window)
  • 分类
  • 归档
GitHub (opens new window)
  • SpringCloud

  • 持久层框架

  • 相关知识

    • Mybatis 代码生成工具比较
      • Mybatis-generator
      • 通用 Mapper
      • Mybatis-Plus
      • 功能对比
      • 总结
      • 参考文件
  • 微服务核心
  • 相关知识
bombax
2024-05-02
目录

Mybatis 代码生成工具比较

# Mybatis-generator、通用 Mapper 与 Mybatis-Plus 对比

# Mybatis-generator (opens new window)

简介:

  • Mybatis-generator 是一个基于 MyBatis 和 Velocity 的代码生成器,它可以为 MyBatis 和 iBATIS 生成 SQL Map、Java Model 和 Java Mapper。
  • 开发者只需配置好数据库连接和生成规则,就可以自动生成大量的基础代码,从而大大减少了手动编写 SQL Map、Model 和 Mapper 的工作量。

优点:

  • 自动生成大量基础代码,提高开发效率。
  • 支持多种数据库。
  • 可以通过配置文件灵活定制生成规则。

缺点:

  • 生成的代码可能不完全符合开发者的需求,需要进一步的修改和优化。
  • 不提供额外的功能,如分页、性能分析等。

实战应用建议:

  • 在项目初期,使用 Mybatis-generator 快速生成基础代码,加速开发进程。
  • 在代码生成后,根据实际需求进行必要的修改和优化。
  • Mybatis-generator 使用较为简单,生成的 DAO 类及映射文件中包含基本的 CRUD 操作。需要注意的是,在一次项目中避免多次执行 mybatis-generator,即应当尽量在数据库表建立完整并且确定不会修改之后执行 mabatis-generator,否则再次执行会覆盖原本的 Model、DAO 和映射文件的文件夹(坑)。

# 通用 Mapper (opens new window)

简介:

  • MyBatis 为什么需要通用 Mapper ? (opens new window)
  • 当数据库字段变化频繁时,使用 MBG(mybatis-generator)会带来大量的重构工作,对此,通用 Mapper 给出的解决办法是:给予开发者一个具备丰富的单表方法并且容易扩展的通用的 Mapper。
  • 通用 Mapper 是一个基于 MyBatis 的通用 Mapper 接口,它提供了一套通用的 CRUD 操作方法,使得开发者无需编写 Mapper.xml 文件,只需继承通用 Mapper 接口,即可实现数据库的增删改查操作,同时它还允许开发人员便捷地对通用 Mapper 进行扩展。
  • 通用 Mapper 的代码生成实际上是使用了 MGB,因此通用 Mapper 的代码生成器只是调用了 MGB,然后在这个基础上加入了一些元素来方便开发。
  • 通用 Mapper 同样有 Example 的设计,与 MGB 不同的是,MDB 会对每一个表生成对应的 Example 类,而通用 Mapper 提供了一个统一的 Example 类,这个类和 MBG 生成的相比,需要自己设置属性名,这个类还额外提供了更多的方法。
  • 通用 Mapper 可以看作是 MGB 的改进和扩展,一定程度上解决了使用 MGB 重构的问题。
  • 下一代 通用 Mapper5 (opens new window)。

优点:

  • 简化了 Mapper 的编写,减少了大量的重复代码。
  • 支持多种条件查询和排序。
  • 提供了分页功能。

缺点:

  • 对于复杂的 SQL 查询,可能需要编写自定义的 Mapper 方法。
  • 灵活性相对较低,可能无法满足所有项目的需求。

实战应用建议:

  • 在项目中,对于简单的 CRUD 操作,可以使用通用 Mapper 来减少代码量。
  • 对于复杂的查询需求,可以结合自定义 Mapper 方法来实现。

# Mybatis-Plus

简介:

  • Mybatis-Plus 是一个强大的 MyBatis 扩展插件,它不仅提供了通用的 CRUD 操作,还增加了许多实用的功能,如分页、性能分析、乐观锁等。
  • 同时,Mybatis-Plus 还提供了许多实用的注解和工具类,使得开发者能够更加方便地进行数据库操作。
  • Mybatis-Plus 是 Mybatis 的增强工具(MBG 和通用 Mapper 可看成插件),在 Mybatis 的基础上增加了很多功能,简化开发,提高效率。
  • 与 MBG 不同,使用 Mybatis-Plus 自动生成代码需要编写代码,通过调用 AutoGenerator 类实现代码生成,从这方面来说不如使用插件方便。但是它丰富的功能以及只是相对复杂的配置还是使它领先于 MBG 以及通用 Mapper。

优点:

  • 提供了丰富的功能,如分页、性能分析等。
  • 支持多种条件查询和排序。
  • 提供了注解和工具类,简化了开发过程。

缺点:

  • 相对于通用 Mapper,Mybatis-Plus 的学习成本可能更高一些。
  • 在某些情况下,可能需要进行一些额外的配置和定制。

实战应用建议:

  • 在项目中,如果需要更多的功能和灵活性,可以考虑使用 Mybatis-Plus。
  • 结合 Mybatis-Plus 提供的注解和工具类,提高开发效率和质量。

# 功能对比

Mybatis-generator 通用 Mapper Mybatis-Plus
代码生成器 支持自动生成 Model,Mapper,Mapper XML 文件

生成方式不够灵活;

生成代码功能较为简单
支持自动生成 Entity,Mapper,Mapper XML 文件;

提供通用的 Mapper 模板,生成方式较灵活;

生成的 Model 文件包含注释能够很好地与数据库表完成映射
支持自动生成 Entity,Mapper,Mapper XML,Service,Controller 文件;

提供 BaseMapper 接口
CRUD 操作 代码生成后每个 Mapper 有固定的 CRUD 方法;

在每个 Mapper 上分别扩展
提供通用 Mapper 接口;

可以扩展通用接口
提供 BaseMapper 接口;

可以扩展通用接口
条件构造器 每个实体类自己的 Example 构造条件 提供通用 Example 提供 Wrapper 进行复杂条件构造
乐观锁 支持 支持
主键策略 支持
性能分析 支持

# 总结

Mybatis-generator、通用 Mapper 和 Mybatis-Plus 都是 Java 持久层框架中非常有用的工具。在选择时,开发者需要根据项目的实际需求和个人偏好来进行权衡。在项目初期,可以使用 Mybatis-generator 快速生成基础代码;对于简单的 CRUD 操作,可以使用通用 Mapper 来减少代码量;如果需要更多的功能和灵活性,可以考虑使用 Mybatis-Plus。无论选择哪个工具,都需要结合项目的实际情况进行定制和优化,以达到最佳的开发效果。

通用 Mapper 是对 Mybatis-generator 的升级改造,解决了使用 Mybatis-generator 可能需要大量重构的问题,并且在这个基础上加入了一些新的功能。Mybatis-Plus 可以看作是在另一个方向上对 Mybatis 的升级改造,不仅能够根据数据库表快速生成 pojo 实体类,还封装了大量 CRUD 方法,使用 Wrapper 解决了复杂条件构造等问题,更是根据开发中常见的问题给出了一系列解决方案。

# 参考文件

  • 各官方文档
  • Mybatis-generator/通用 Mapper/Mybatis-Plus 对比_通用 mapper mybatis 区别 (opens new window)
  • Mybatis-generator、通用 Mapper 与 Mybatis-Plus:深入比较与实战应用) (opens new window)
上次更新: 2025/01/19, 15:44:31
持久层框架之 MyBatisPlus

← 持久层框架之 MyBatisPlus

最近更新
01
第九章 前端工程化-下
12-11
02
第八章 前端工程化-中
12-11
03
第七章 前端工程化-上
12-04
更多文章>
Theme by Vdoing | Copyright © 2024-2026 bombax | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式