IT七剑客 IT七剑客
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
  • Java基础语法

  • 程序人生

  • 实用工具

  • Java重要知识点

  • Java工具

    • currentTimeMillis 统计耗时了,太 Low,试试 Spring Boot 源码在用的 StopWatch吧,够优雅!
    • WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!
    • 在IDEA里下个五子棋不过分吧?
    • 好用到爆!GitHub 星标 32.5k+的命令行软件管理神器,功能真心强大!
    • 我们公司使用了6年的Spring Boot项目部署方案,打包 + 一键部署,稳的一批
    • 再见 Spring Task,这款老而弥坚的开源任务调度框架,用起来够优雅!
    • 解放双手!推荐一款 GitHub 星标 8.2k+的命令行软件管理器,非常酷炫!
    • 再见收费的TeamViewer,推荐一款不限速的国产远程控制软件
    • 几行代码,网站图片访问速度 100ms 飙升到 20ms!
    • 某意大利小哥,竟靠一个缓存中间件直接封神?
    • WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!
    • 厉害!我带的实习生仅用四步就整合好SpringSecurity+JWT实现登录认证!
    • 保姆级SpringBoot+Vue图片上传到阿里云OSS教程
    • 两天两夜,1M图片优化到100kb!
    • 干掉Session?这个跨域认证解决方案真的优雅!
    • 前后端分离项目,如何解决跨域问题?
    • Spring Boot AOP 扫盲,实现接口访问的统一日志记录
    • 再见收费的Navicat!操作所有数据库就靠它了!
    • 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!
      • 再见丑陋的 SwaggerUI,这款开源的API文档生成神器界面更炫酷,逼格更高!
    • 数组与字符串

    • 沉默王二 Java
    • Java工具
    沉默王二
    2022-09-01
    目录

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

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

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

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

    img

    # 一、使用 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>
    复制代码
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

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

    img

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

    img

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

    mybatis.org/generator/r… (opens new window)

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

    img

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

    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.7</version>
    复制代码
    
    1
    2
    3
    4

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

    <configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
    复制代码
    
    1
    2

    img

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

    <generatorConfiguration>
        <context id="myContext" targetRuntime="MyBatis3" defaultModelType="flat">
    
            <!-- 注释 -->
            <commentGenerator>
                <!-- 是否不生成注释 -->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
    
            <!-- jdbc连接 -->
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                            connectionURL="jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false"
                            userId="codingmoretiny02"
                            password="123456">
                <!--高版本的 mysql-connector-java 需要设置 nullCatalogMeansCurrent=true-->
                <property name="nullCatalogMeansCurrent" value="true"/>
            </jdbcConnection>
    
            <!-- 类型转换 -->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="true"/>
            </javaTypeResolver>
    
            <!-- 生成实体类地址 -->
            <javaModelGenerator targetPackage="com.codingmore.mbg.po" targetProject="src/main/java">
                <!-- 是否针对string类型的字段在set方法中进行修剪,默认false -->
                <property name="trimStrings" value="true"/>
            </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>
    复制代码
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    • 配置文件至少得包含一个context
    • commentGenerator 用来配置生成的注释
    • jdbcConnection 用来链接数据库
    • javaTypeResolver 配置 JDBC 与 Java 的类型转换规则
    • javaModelGenerator 配置 po 生成的包路径和项目路径
    • sqlMapGenerator 配置 mapper.xml 文件生成的目录
    • javaClientGenerator 配置 mapper.java 文件生成的目录
    • 一个 table 对应一张表,如果想同时生成多张表,需要配置多个 table

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

    juejin.cn/post/684490… (opens new window)

    由于数据库表可能会发生变动,因此我们需要追加一个配置 <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>
    复制代码
    
    1
    2
    3
    4
    5
    6
    7
    8

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

    <includeCompileDependencies>true</includeCompileDependencies>
    复制代码
    
    1
    2

    到此为止,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>
    复制代码
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

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

    img

    # 二、使用 MyBatis-Plus 的 AutoGenerator

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

    img

    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>
    复制代码
    
    1
    2
    3
    4
    5
    6

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

    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.3</version>
    </dependency>
    复制代码
    
    1
    2
    3
    4
    5
    6

    第三步,进行全局配置。

    // 全局配置
    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);
    复制代码
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    第四步,配置数据源。

    // 数据源配置
    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");
    复制代码
    
    1
    2
    3
    4
    5
    6
    7

    第五步,配置包。

    // 包配置
    PackageConfig pc = new PackageConfig();
    pc.setParent("top.codingmore.mpg");
    复制代码
    
    1
    2
    3
    4

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

    baomidou.com/pages/06157… (opens new window)

    示例代码示例如下所示:

    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("沉默王二");
    
            mpg.setGlobalConfig(gc);
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setDriverName("com.mysql.cj.jdbc.Driver");
            mpg.setDataSource(dsc);
    
            mpg.execute();
        }
    }
    复制代码
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

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

    img

    # 三、总结对比

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

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

    img

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

    github.com/itwanger/co… (opens new window)


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

    github.com/itwanger/to… (opens new window)

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

    tobebetterjavaer.com/ (opens new window)

    img

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

    作者:沉默王二 链接:https://juejin.cn/post/7064387392152535047 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    #Java#沉默王二
    上次更新: 2023/04/05, 05:23:58
    再见收费的Navicat!操作所有数据库就靠它了!
    再见丑陋的 SwaggerUI,这款开源的API文档生成神器界面更炫酷,逼格更高!

    ← 再见收费的Navicat!操作所有数据库就靠它了! 再见丑陋的 SwaggerUI,这款开源的API文档生成神器界面更炫酷,逼格更高!→

    最近更新
    01
    How the creator of Angular is dehydrating the web (Ep 574)
    06-07
    02
    For those who just don’t Git it (Ep 573)
    06-07
    03
    Modern work requires attention. Constant alerts steal it
    06-07
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 IT七剑客 | MIT License
  • 闽ICP备2021006579号-4
  • 闽公网安备 35012102500470号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式