作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper。
Mybatis Generator 是 MyBatis 官方提供的一个代码生成工具,完全可以胜任这个工作,不过最近在学习开发“编程喵”开源网站的时候试用了一下 MyBatis-Plus 官方提供 AutoGenerator,发现配置更简单,开发效率更高!于是就来给小伙伴们安利一波。
让我们来通过一个 gif 感受一下 AutoGenerator 的强大。
编程喵使用的 MySQL 版本是 8.0,可以在链接上 MySQL 后使用 select version();
命令查询版本。
打开 Navicat,把 SQL 文件导入到本地数据库,
关闭链接,重新打开就可以看到导入后的数据库 codingmore,里面一共 27 张表。
第一步,在 pom.xml 文件中添加 MySQL+MyBatis 的依赖(Mybatis Generator 的前置条件)。
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.2.2
mysql
mysql-connector-java
runtime
添加完成后,一定要执行一次 Maven 重载(见下图),确保 MyBatis 的依赖加载完毕后再执行第二步。
否则下一步可能不通过,但又得不到任何错误提示。不要问我为什么,踩过坑后痛苦的领悟。
添加完成后,可以通过 Maven 插件来生成骨架代码,也可以通过 Java 代码来生成骨架代码,这里以 Maven 插件的形式来演示。Java 代码的形式可参照 Mybatis Generator:
Java实现Generator
第二步,在 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 文件的结构图。
只添加插件还不够,还需要对其进行配置,我们使用 configurationFile 元素来指定一个配置文件 mybatis-generator-config.xml:
src/main/resources/mybatis-generator-config.xml
由于数据库表可能会发生变动,因此我们需要追加一个配置
,允许覆盖旧的文件。为了防止我们编写的 SQL 语句被覆盖掉,MyBatis Generator 只会覆盖旧的 po、dao、而 *mapper.xml 不会覆盖,而是追加。
Mybatis Generator 需要连接数据库,所以还需要在 plugin 节点中添加数据库驱动依赖,就像这样:
mysql
mysql-connector-java
但我们在 pom.xml 文件中已经添加过 MySQL 的链接驱动了,这里再添加就会显得很多余。好在 Maven 为我们提供了 includeCompileDependencies 属性,可以让我们在插件中引用之前添加的依赖。
true
来看一下 mybatis-generator-config.xml 的位置。
来看一下 mybatis-generator-config.xml 的内容。
更多配置信息可以参照下面这篇文章:
更多配置
到此为止,mybatis-generator-maven-plugin 就算是配置完成了,完整内容如下图所示:
配置完成后可以双击运行 Maven 的插件 Mybatis Generator,没有问题的话,可以看到生成后的文件。
MyBatis-Plus(简写 MP)是 MyBatis 的增强工具,官方宣称 MP 和 MyBatis 的关系就好像魂斗罗中的 1P 和 2P,可谓好基友,天下走。
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 对象。
package top.codingmore.generator;
import com.baomidou.mybatisplus.generator.AutoGenerator;
/**
*
*/
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
}
}
在 main 方法中添加全局配置。
// 全局配置
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);
配置数据源。
// 数据源配置
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("1qa");
mpg.setDataSource(dsc);
第五步,配置包。
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("top.codingmore.mpg");
更多配置项可以到官方查看:
https://baomidou.com/pages/061573/
完整代码如下所示:
package top.codingmore.generator;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
/**
*/
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
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);
// 数据源配置
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("Huicheng123");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("top.codingmore.mpg");
mpg.setPackageInfo(pc);
mpg.execute();
}
}
再来看一下运行后的效果,可以看到数据库表对应的 controller、service、entity、mapper 等等全有了——爽歪歪:
对比 Mybatis 的 Generator 和 MyBatis-Plus 的 AutoGenerator,就可以得出这样一条结论:后者的配置更简单,开发效率也更高,功能也更强大——可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码。
MyBatis-Plus 的确配得上 Plus 啊,确实优秀。