--- title: Spring Boot 整合 MyBatis-Plus AutoGenerator 生成编程喵项目骨架代码 category: - Java企业级开发 tag: - Spring Boot --- 作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper。 Mybatis Generator 是 MyBatis 官方提供的一个代码生成工具,完全可以胜任这个工作,不过最近在开发“编程喵🐱”开源网站的时候试用了一下 MyBatis-Plus 官方提供 AutoGenerator,发现配置更简单,开发效率更高!于是就来给小伙伴们安利一波。 让我们来通过一个 gif 感受一下 AutoGenerator 的强大。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-1.gif) ## 导入 SQL 文件 编程喵项目的 SQL 文件我已经同步到本教程所在的源码当中。 >路径:[https://github.com/itwanger/codingmore-learning/tree/main/codingmore-autogenerator](https://github.com/itwanger/codingmore-learning/tree/main/codingmore-autogenerator) 可以通过 GitHub 桌面版从 GitHub 上下载本教程专属的项目 codingmore-autogenerator 到本地,SQL 文件的位置参照下图。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-47997c23-cb65-4801-954c-0ec611b764ad.png) 编程喵使用的 MySQL 版本是 8.0,可以在链接上 MySQL 后使用 `select version();` 命令查询版本。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-ea5bbe50-ba28-4056-a81f-a68651a58391.png) 打开 Navicat,把 SQL 文件导入到本地数据库, ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-d523792f-2d55-4485-b64d-b4763ecd7b77.png) 关闭链接,重新打开就可以看到导入后的数据库 codingmore,里面一共 27 张表。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-3cda9cb7-dda5-4aca-9cea-cc400768b921.png) ## 先体验 Mybatis Generator 第一步,在 pom.xml 文件中添加 MySQL+MyBatis 的依赖(Mybatis Generator 的前置条件)。 ``` org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.2 mysql mysql-connector-java runtime ``` 添加完成后,一定要执行一次 Maven 重载(见下图),确保 MyBatis 的依赖加载完毕后再执行第二步。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-b9dc31ee-32f4-4556-b2e8-b0ed114ec81a.png) 否则下一步可能不通过,但又得不到任何错误提示。不要问我为什么,踩过坑后痛苦的领悟。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-3.png) 添加完成后,可以通过 Maven 插件来生成骨架代码,也可以通过 Java 代码来生成骨架代码,这里以 Maven 插件的形式来演示。Java 代码的形式可参照 Mybatis Generator: >[https://mybatis.org/generator/running/runningWithJava.html](https://mybatis.org/generator/running/runningWithJava.html) 第二步,在 pom.xml 文件中,添加 MyBatis Generator 插件,注意是在 **build→plugins** 下节点下添加。 ``` org.mybatis.generator mybatis-generator-maven-plugin 1.3.7 src/main/resources/mybatis-generator-config.xml true true ``` MyBatis Generator 插件目前最新版是 1.4.0,我们采用上一个稳定版本 1.3.7,新版本容易有坑。 来看一下添加 MyBatis Generator 插件后 pom.xml 文件的结构图。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-136e3eec-04ce-478b-aa7d-3d5913466f70.png) 只添加插件还不够,还需要对其进行配置,我们使用 configurationFile 元素来指定一个配置文件 mybatis-generator-config.xml: ``` src/main/resources/mybatis-generator-config.xml ``` 由于数据库表可能会发生变动,因此我们需要追加一个配置 `true`,允许覆盖旧的文件。为了防止我们编写的 SQL 语句被覆盖掉,MyBatis Generator 只会覆盖旧的 po、dao、而 *mapper.xml 不会覆盖,而是追加。 Mybatis Generator 需要连接数据库,所以还需要在 plugin 节点中添加数据库驱动依赖,就像这样: ``` mysql mysql-connector-java ``` 但我们在 pom.xml 文件中已经添加过 MySQL 的链接驱动了,这里再添加就会显得很多余。好在 Maven 为我们提供了 includeCompileDependencies 属性,可以让我们在插件中引用之前添加的依赖。 ``` true ``` 来看一下 mybatis-generator-config.xml 的位置。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-499b434d-4ae8-45c3-bfeb-9f5b4710b81e.png) 来看一下 mybatis-generator-config.xml 的内容。 ```
``` - 配置文件至少得包含一个context - commentGenerator 用来配置生成的注释 - jdbcConnection 用来链接数据库 - javaTypeResolver 配置 JDBC 与 Java 的类型转换规则 - javaModelGenerator 配置 po 生成的包路径和项目路径 - sqlMapGenerator 配置 mapper.xml 文件生成的目录 - javaClientGenerator 配置 mapper.java 文件生成的目录 - 一个 table 对应一张表,如果想同时生成多张表,需要配置多个 table 更多配置信息可以参照下面这篇文章: >[https://juejin.cn/post/6844903982582743048](https://juejin.cn/post/6844903982582743048) 到此为止,mybatis-generator-maven-plugin 就算是配置完成了,完整内容如下图所示: ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-c09c7dcd-ab4e-437b-a512-a9e0bf1f533c.png) 配置完成后可以双击运行 Maven 的插件 Mybatis Generator,没有问题的话,可以看到生成后的文件。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-843487f6-5823-4291-b6c3-b4f69b9bba51.png) ## 再体验 MyBatis-Plus 的 AutoGenerator MyBatis-Plus(简写 MP)是 MyBatis 的增强工具,官方宣称 MP 和 MyBatis 的关系就好像魂斗罗中的 1P 和 2P,可谓好基友,天下走。 ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-7.png) AutoGenerator 是 MyBatis-Plus 推出的代码生成器,可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,比 Mybatis Generator 更强大,开发效率更高。 通过前面的体验,想必大家确实感觉到了 Mybatis Generator 的繁琐,接下来,我们来体验一下 AutoGenerator,对比过后,大家心里就有答案了。 第一步,在 pom.xml 文件中添加 AutoGenerator 的依赖。 ``` com.baomidou mybatis-plus-generator 3.4.1 ``` 第二步,添加模板引擎依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,这里使用 Velocity 引擎。 ``` org.apache.velocity velocity-engine-core 2.3 ``` 第三步,新建 CodeGenerator.java 文件,在 main 方法中添加 MyBatis-Plus 的 AutoGenerator 对象。 ```java package top.codingmore.generator; import com.baomidou.mybatisplus.generator.AutoGenerator; /** * 微信搜索「沉默王二」,回复 Java * * @author 沉默王二 * @date 5/17/22 */ public class CodeGenerator { public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); } } ``` 在 main 方法中添加全局配置。 ```java // 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("沉默王二"); gc.setOpen(false); gc.setDateType(DateType.ONLY_DATE); gc.setSwagger2(true); gc.setIdType(IdType.AUTO); gc.setBaseColumnList(true); gc.setBaseResultMap(true); gc.setFileOverride(true); mpg.setGlobalConfig(gc); ``` 配置数据源。 ```java // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/codingmore?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("123456"); mpg.setDataSource(dsc); ``` 第五步,配置包。 ```java // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("top.codingmore.mpg"); ``` 更多配置项可以到官方查看: >[https://baomidou.com/pages/061573/](https://baomidou.com/pages/061573/) 完整代码如下所示: ---- 更多内容,只针对《二哥的Java进阶之路》星球用户开放,需要的小伙伴可以[戳链接🔗](https://javabetter.cn/zhishixingqiu/)加入我们的星球,一起学习,一起卷。。**编程喵**🐱是一个 Spring Boot+Vue 的前后端分离项目,融合了市面上绝大多数流行的技术要点。通过学习实战项目,你可以将所学的知识通过实践进行检验、你可以拓宽自己的技术边界,你可以掌握一个真正的实战项目是如何从 0 到 1 的。 ---- ## 源码地址: >- 编程喵:[https://github.com/itwanger/coding-more](https://github.com/itwanger/coding-more) >- codingmore-autogenerator:[https://github.com/itwanger/codingmore-learning](https://github.com/itwanger/codingmore-learning/tree/main/codingmore-autogenerator) ------ ![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)