取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper。

Mybatis Generator 是 MyBatis 官方提供的一个代码生成工具,完全可以胜任这个工作,不过最近在开发”编程猫”开源网站的时候试用了一下 MyBatis-Plus 官方提供 AutoGenerator,发现配置更简单,开发效率更高!于是就来给小伙伴们安利一波。

来个 GIF 感受一下 AutoGenerator 生成代码的快感吧。

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

一、使用 Mybatis Generator

为了形成鲜明的对比,我们先来使用 Mybatis Generator 生成一次代码,感受一下整个过程。

第一步,在 pom.xml 文件中添加 MySQL+MyBatis 的依赖(Mybatis Generator 的前置条件)。

<!-- MySQL 连接池 -->
<dependency>
    <groupid>mysql</groupid>
    <artifactid>mysql-connector-java</artifactid>
    <version>${mysql.version}</version>
</dependency>
<!--MyBatis 的 Spring Boot starter -->
<dependency>
    <groupid>org.mybatis.spring.boot</groupid>
    <artifactid>mybatis-spring-boot-starter</artifactid>
    <version>2.2.2</version>
</dependency>

添加完成后,一定要执行一次 Maven 重载(见下图),确保 MyBatis 的依赖加载完毕后再执行第二步。

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

否则下一步可能不通过,但又得不到任何错误提示。不要问我为什么,踩过坑后痛苦的领悟。

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

添加完成后,可以通过 Maven 插件来生成代码,也可以通过 Java 代码来生成代码,这里以 Maven 插件的形式来演示。Java 代码的形式可参照 Mybatis Generator:

https://mybatis.org/generator/running/runningWithJava.html

第二步,在 pom.xml 的 MyBatis Generator 插件,先来看一下整体的结构图,注意是在 build→plugins 下节点下添加。

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

首先是 MyBatis Generator 插件,目前最新版是 1.4.0,我们采用上一个稳定版本 1.3.7,稳一点。

<groupid>org.mybatis.generator</groupid>
<artifactid>mybatis-generator-maven-plugin</artifactid>
<version>1.3.7</version>

只添加插件还不够,还需要对其进行配置,我们使用 configurationFile 元素来指定一个配置文件 mybatis-generator-config.xml:

<configurationfile>src/main/resources/mybatis-generator-config.xml</configurationfile>

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

来看一下 mybatis-generator-config.xml 的内容。

<generatorconfiguration>
    <context id="myContext" targetruntime="MyBatis3" defaultmodeltype="flat">

        <!-- 注释 -->
        <commentgenerator>
            <!-- 是否不生成注释 -->
            <property name="suppressAllComments" value="true">
        </property></commentgenerator>

        <!-- jdbc连接 -->
        <jdbcconnection driverclass="com.mysql.cj.jdbc.Driver" connectionurl="jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false" userid="codingmoretiny02" password="123456">
            <!--高版本的 mysql-connector-java 需要设置 nullCatalogMeansCurrent=true-->
            <property name="nullCatalogMeansCurrent" value="true">
        </property></jdbcconnection>

        <!-- 类型转换 -->
        <javatyperesolver>
            <property name="forceBigDecimals" value="true">
        </property></javatyperesolver>

        <!-- 生成实体类地址 -->
        <javamodelgenerator targetpackage="com.codingmore.mbg.po" targetproject="src/main/java">
            <!-- 是否针对string类型的字段在set方法中进行修剪,默认false -->
            <property name="trimStrings" value="true">
        </property></javamodelgenerator>

        <!-- 生成Mapper.xml文件 -->
        <sqlmapgenerator targetpackage="com.codingmore.mbg.mapper" targetproject="src/main/resources">
        </sqlmapgenerator>

        <!-- 生成 XxxMapper.java 接口-->
        <javaclientgenerator targetpackage="com.codingmore.mbg.dao" targetproject="src/main/java" type="XMLMAPPER">
        </javaclientgenerator>

        <table schema tablename="user" domainobjectname="User" enablecountbyexample="false" enabledeletebyexample="false" enableselectbyexample="false" enableupdatebyexample="false" selectbyexamplequeryid="false">
        </table>
    </context>
</generatorconfiguration>
  • 配置文件至少得包含一个context
  • commentGenerator 用来配置生成的注释
  • jdbcConnection 用来链接数据库
  • javaTypeResolver 配置 JDBC 与 Java 的类型转换规则
  • javaModelGenerator 配置 po 生成的包路径和项目路径
  • sqlMapGenerator 配置 mapper.xml 文件生成的目录
  • javaClientGenerator 配置 mapper.java 文件生成的目录
  • 一个 table 对应一张表,如果想同时生成多张表,需要配置多个 table

更多配置信息可以参照下面这篇文章:

https://juejin.cn/post/6844903982582743048

由于数据库表可能会发生变动,因此我们需要追加一个配置 <overwrite>true</overwrite>,允许覆盖旧的文件。为了防止我们编写的 SQL 语句被覆盖掉,MyBatis Generator 只会覆盖旧的 po、dao、而 *mapper.xml 不会覆盖,而是追加。

Mybatis Generator 需要链接数据库,所以还需要添加数据库驱动依赖,就像这样:

<configuration>
</configuration>
<dependency>
    <groupid>mysql</groupid>
    <artifactid>mysql-connector-java</artifactid>
    <version>${mysql.version}</version>
</dependency>

这样就会显得比较冗余,因为我们之前添加过了。好在 Maven 提供了 includeCompileDependencies 属性,可以让我们在插件中引用之前添加的依赖。

<includecompiledependencies>true</includecompiledependencies>

到此为止,mybatis-generator-maven-plugin 就算是配置完成了,完整内容如下所示:

<build>
    <plugins>
        <plugin>
            <groupid>org.mybatis.generator</groupid>
            <artifactid>mybatis-generator-maven-plugin</artifactid>
            <version>1.3.7</version>
            <configuration>
                <configurationfile>src/main/resources/mybatis-generator-config.xml</configurationfile>
                <overwrite>true</overwrite><includecompiledependencies>true</includecompiledependencies>
            </configuration>
        </plugin>
    </plugins>
</build>

配置完成后可以双击运行 Maven 的插件 Mybatis Generator,没有问题的话,可以看到生成后的文件。

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

二、使用 MyBatis-Plus 的 AutoGenerator

MyBatis-Plus(简写 MP)是 MyBatis 的增强工具,官方宣称 MP 和 MyBatis 的关系就好像魂斗罗中的 1P 和 2P,可谓好基友,天下走。

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

AutoGenerator 是 MyBatis-Plus 推出的代码生成器,可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,比 Mybatis Generator 更强大,开发效率更高。

通过前面的体验,想必大家确实感觉到了 Mybatis Generator 的繁琐,接下来,我们来体验一下 AutoGenerator,对比过后,大家心里就有答案了。

第一步,在 pom.xml 文件中添加 AutoGenerator 的依赖。

<dependency>
    <groupid>com.baomidou</groupid>
    <artifactid>mybatis-plus-generator</artifactid>
    <version>3.4.1</version>
</dependency>

第二步,添加模板引擎依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,这里使用默认的 Velocity 引擎。

<dependency>
    <groupid>org.apache.velocity</groupid>
    <artifactid>velocity-engine-core</artifactid>
    <version>2.3</version>
</dependency>

第三步,进行全局配置。

// 全局配置
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);

第四步,配置数据源。

// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("codingmoretiny02");
dsc.setPassword("123456");

第五步,配置包。

// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("top.codingmore.mpg");

更多配置项可以到官方查看:

https://baomidou.com/pages/061573/

示例代码示例如下所示:

public class CodeGenerator {
    public static void main(String[] args) {
        // &#x4EE3;&#x7801;&#x751F;&#x6210;&#x5668;
        AutoGenerator mpg = new AutoGenerator();
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("&#x6C89;&#x9ED8;&#x738B;&#x4E8C;");

        mpg.setGlobalConfig(gc);
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        mpg.setDataSource(dsc);

        mpg.execute();
    }
}

再来看一下运行后的效果,可以看到数据库表对应的 controller、service、entity、mapper 等等全有了——爽歪歪:

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

三、总结对比

对比 Mybatis 的 Generator 和 MyBatis-Plus 的 AutoGenerator,就可以得出这样一条结论:后者的配置更简单,开发效率也更高,功能也更强大——可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码。

MyBatis-Plus 的确配得上 Plus 啊,确实优秀

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

想要完整示例的话,可以到 GitHub 上查看:

https://github.com/itwanger/codingmore-learning/tree/main/codingmore-tiny-02

本篇已收录至 GitHub 上星标 1.5k+ star 的开源专栏《Java 程序员进阶之路》,该专栏风趣幽默、通俗易懂,对 Java 爱好者极度友好和舒适😄,内容包括但不限于 Java 基础、Java 集合框架、Java IO、Java 并发编程、Java 虚拟机、Java 企业级开发(Git、SSM、Spring Boot)等核心知识点

https://github.com/itwanger/toBeBetterJavaer

star 了这个仓库就等于你拥有了成为了一名优秀 Java 工程师的潜力。也可以戳下面的链接跳转到《Java 程序员进阶之路》的官网网址,开始愉快的学习之旅吧。

https://tobebetterjavaer.com/

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟

Original: https://www.cnblogs.com/qing-gee/p/15891506.html
Author: 沉默王二
Title: 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/594074/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 深入理解Java虚拟机之自己编译JDK

    题外话 最近在阅读《深入理解Java虚拟机》,其中有一小节实战是自己编译JDK,实际操作下来后遇到问题不少,为此特地记录,也希望可以给大家带来一些参考! 前置准备 平台及工具: W…

    Java 2023年6月6日
    085
  • rabbitmq常见问题–持续补充中

    1.消费者不能绑定消费者 问题原因1:消费者绑定的exchange或者rkey绑定错误 下游绑定数据,如果rkey不对,就会导致失败 解决办法:上游与下游对齐 rkey,与exch…

    Java 2023年5月30日
    077
  • 高性能Java RPC框架Dubbo

    摘自《Java微服务分布式架构企业实战》 讲解了使用Spring Cloud来解决微服务应用程序开发过程中所遇到的一系列诸如客户端如何调用服务、服务与服务之间如何进行通信、服务如何…

    Java 2023年5月29日
    067
  • 【强制】不要在 foreach 循环里进行元素的 remove/add 操作。

    【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。——…

    Java 2023年6月9日
    078
  • [转]解决The requested resource is not available的方法

    此博文为转载博文,首先感谢原作者 HTTP Status 404(The requested resource is not available)异常主要是路径错误或拼写错误造成的…

    Java 2023年6月13日
    079
  • Redis

    一、Nosql概述 1、单机Mysql时代 90年代,一个网站的访问量一般不会太大,单个数据库完全够用。随着用户增多,网站出现以下问题 网站80%的情况都是在读,每次都要去查询数据…

    Java 2023年6月7日
    081
  • nginx的upstream后端名称居然变成了请求的host了?

    问题现象: 今天用nginx做反向代理服务器时,配置upstream后,直接在location里使用,居然发现代理失败, 将upstream的后端名称当做IP(Host)地址使用了…

    Java 2023年5月30日
    098
  • C语言实现扫雷游戏(完整版)

    头文件定义、函数声明 下面就是扫雷中使用到的所有函数,为了省事我把所有的代码都放在一个C文件中实现 宏定义中设置了游戏的界面布局,以及设置地雷的个数(这里默认的是10个地雷),界面…

    Java 2023年6月15日
    067
  • 谈谈开发前编程的前置内容

    https://www.cnblogs.com/jingran/articles/15362137.html Original: https://www.cnblogs.com/j…

    Java 2023年6月9日
    083
  • jdk8系列二、jdk8方法引用、重复注解、更好的类型推断、新增注解

    一、方法引用 方法引用使得开发者可以直接引用现存的方法、Java类的构造方法或者实例对象。方法引用和Lambda表达式配合使用,使得java类的构造方法看起来紧凑而简洁,没有很多复…

    Java 2023年5月30日
    097
  • mybatis-plus复杂where查询

    多个组合条件or查询 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrappe…

    Java 2023年5月30日
    078
  • 12.zookeeper的配置

    1.下载zookeeper 2、配置zookeeper ,主要是修改zoo.cfg 文件,在zookeppe 的conf 文件夹下找到zoo_sample.cfg 文件复制一份出来…

    Java 2023年6月13日
    077
  • 【Redis】Redis Cluster-集群数据迁移

    Redis通过对KEY计算hash,将KEY映射到slot,集群中每个节点负责一部分slot的方式管理数据,slot最大个数为16384。在集群节点对应的结构体变量clusterN…

    Java 2023年6月8日
    082
  • Android–数据库创建

    ​ 新建帮助类 创建一个类并继承 SQLiteOpenHelper import android.content.Context; import android.database….

    Java 2023年6月8日
    059
  • Spring Boot 应用部署流程

    在本机操作,执行以下步骤启动项目 1、从Github上下载源码 git clone https://github.com/ChinaSilence/any-video.git 2、…

    Java 2023年5月30日
    094
  • 谷歌浏览器安装react-developer-tools报错

    谷歌浏览器用一下react-developer-tools插件,结果使得原来的本来可以运行的react项目也报错,类似下面这种:Uncaught TypeError: Cannot…

    Java 2023年6月6日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球