更简单更高效的Mybatis Plus最新代码生成器AutoGenerator

目录
  • 正文
  • 一、概述
  • 二、使用AutoGenerator
    • 1. 初始化数据库表结构(以User用户表为例)
    • 2. 在 pom.xml 文件中添加 AutoGenerator 的依赖。
    • 3. 添加模板引擎依赖
    • 4. 全局配置
    • 5. 自定义模板生成DTO、VO
    • User用户类
  • 总结

正文

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

今天的主角是MP推出的一款代码生成器,本文主要来介绍一下它强大的代码生成功能。

一、概述

AutoGeneratorMyBatis Plus推出的代码生成器,可以快速生成EntityMapperMapper XMLServiceController等各个模块的代码,比Mybatis Generator更强大,开发效率更高。

以往我们使用mybatis generator生成代码正常需要配置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>

二、使用AutoGenerator

1. 初始化数据库表结构(以User用户表为例)

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
  `mobile` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号',
  `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

2. 在 pom.xml 文件中添加 AutoGenerator 的依赖。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.1</version>
</dependency>

3. 添加模板引擎依赖

MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,这里使用Freemarker引擎。

<dependency>
   <groupId>org.freemarker</groupId>
   <artifactId>freemarker</artifactId>
   <version>2.3.31</version>
</dependency>

4. 全局配置

package com.shardingspherejdbc.mybatisplus.genertor;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.shardingspherejdbc.mybatisplus.engine.EnhanceFreemarkerTemplateEngine;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
 * 代码生成器
 *
 * @author: austin
 * @since: 2023/2/6 15:28
 */
public class CodeGenerator {
    public static void main(String[] args) {
        // 数据源配置
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/sharding-db0?serverTimezone=GMT%2B8", "root", "admin")
                .globalConfig(builder -> {
                    builder.author("austin")        // 设置作者
                            .enableSwagger()        // 开启 swagger 模式 默认值:false
                            .disableOpenDir()       // 禁止打开输出目录 默认值:true
                            .commentDate("yyyy-MM-dd") // 注释日期
                            .dateType(DateType.ONLY_DATE)   //定义生成的实体类中日期类型 DateType.ONLY_DATE 默认值: DateType.TIME_PACK
                            .outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.shardingspherejdbc.mybatisplus") // 父包模块名
                            .controller("controller")   //Controller 包名 默认值:controller
                            .entity("entity")           //Entity 包名 默认值:entity
                            .service("service")         //Service 包名 默认值:service
                            .mapper("mapper")           //Mapper 包名 默认值:mapper
                            .other("model")
                            //.moduleName("xxx")        // 设置父包模块名 默认值:无
                            .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper")); // 设置mapperXml生成路径
                    //默认存放在mapper的xml下
                })
                .injectionConfig(consumer -> {
                    Map<String, String> customFile = new HashMap<>();
                    // DTO、VO
                    customFile.put("DTO.java", "/templates/entityDTO.java.ftl");
                    customFile.put("VO.java", "/templates/entityVO.java.ftl");
                    consumer.customFile(customFile);
                })
                .strategyConfig(builder -> {
                    builder.addInclude("user") // 设置需要生成的表名 可边长参数“user”, “user1”
                            .addTablePrefix("tb_", "gms_") // 设置过滤表前缀
                            .serviceBuilder()//service策略配置
                            .formatServiceFileName("%sService")
                            .formatServiceImplFileName("%sServiceImpl")
                            .entityBuilder()// 实体类策略配置
                            .idType(IdType.ASSIGN_ID)//主键策略  雪花算法自动生成的id
                            .addTableFills(new Column("create_time", FieldFill.INSERT)) // 自动填充配置
                            .addTableFills(new Property("update_time", FieldFill.INSERT_UPDATE))
                            .enableLombok() //开启lombok
                            .logicDeleteColumnName("deleted")// 说明逻辑删除是哪个字段
                            .enableTableFieldAnnotation()// 属性加上注解说明
                            .controllerBuilder() //controller 策略配置
                            .formatFileName("%sController")
                            .enableRestStyle() // 开启RestController注解
                            .mapperBuilder()// mapper策略配置
                            .formatMapperFileName("%sMapper")
                            .enableMapperAnnotation()//@mapper注解开启
                            .formatXmlFileName("%sMapper");
                })
                // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                //.templateEngine(new FreemarkerTemplateEngine())
                .templateEngine(new EnhanceFreemarkerTemplateEngine())
                .execute();
    }
}

5. 自定义模板生成DTO、VO

package com.shardingspherejdbc.mybatisplus.engine;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.Map;
/**
 * 代码生成器支持自定义[DTO\VO等]模版
 *
 * @author: austin
 * @since: 2023/2/9 13:00
 */
@Component
public class EnhanceFreemarkerTemplateEngine extends FreemarkerTemplateEngine {
    @Override
    protected void outputCustomFile(Map<String, String> customFile, TableInfo tableInfo, Map<String, Object> objectMap) {
        String entityName = tableInfo.getEntityName();
        String otherPath = this.getPathInfo(OutputFile.other);
        customFile.forEach((key, value) -> {
            String fileName = String.format(otherPath + File.separator + entityName + "%s", key);
            this.outputFile(new File(fileName), objectMap, value, true);
        });
    }
}

未生成代码前的项目目录如下:

运行CodeGenerator生成代码:

14:20:21.127 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================准备生成文件...==========================
14:20:22.053 [main] DEBUG com.baomidou.mybatisplus.generator.config.querys.MySqlQuery - 执行SQL:show table status WHERE 1=1  AND NAME IN ('user')
14:20:22.081 [main] DEBUG com.baomidou.mybatisplus.generator.config.querys.MySqlQuery - 返回记录数:1,耗时(ms):26
14:20:22.167 [main] DEBUG com.baomidou.mybatisplus.generator.config.querys.MySqlQuery - 执行SQL:show full fields from `user`
14:20:22.171 [main] WARN com.baomidou.mybatisplus.generator.IDatabaseQuery$DefaultDatabaseQuery - 当前表[user]的主键为自增主键,会导致全局主键的ID类型设置失效!
14:20:22.182 [main] DEBUG com.baomidou.mybatisplus.generator.config.querys.MySqlQuery - 返回记录数:5,耗时(ms):14
14:20:22.502 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================文件生成完成!!!==========================

项目成功生成了Entity、Service、Controller、Mapper、Mapper.xml、DTO、VO文件。

User用户类

package com.shardingspherejdbc.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 用户
 * </p>
 *
 * @author austin
 * @since 2023-02-09
 */
@Getter
@Setter
@TableName("user")
@ApiModel(value = "User对象", description = "用户")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty("用户名")
    @TableField("username")
    private String username;
    @ApiModelProperty("手机号")
    @TableField("mobile")
    private String mobile;
    @ApiModelProperty("创建人")
    @TableField("create_by")
    private String createBy;
    @ApiModelProperty("创建时间")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;
}

想了解MyBatis Plus代码生成配置可以参考官方配置:代码生成器配置新

总结

对比MybatisGeneratorMyBatis-PlusAutoGenerator,就可以得出这样一条结论:后者的配置更简单,开发效率也更高,功能也更强大——可快速生成MapperModelServiceControllerDTO/VO层代码,到这里AutoGenerator生成器的介绍已经完成

以上就是更简单更高效的Mybatis Plus最新代码生成器AutoGenerator的详细内容,更多关于Mybatis Plus代码生成器的资料请关注我们其它相关文章!

(0)

相关推荐

  • 解决mybatis-generator生成器添加类注释方法无效的问题

    遇到的问题! 注:自定义CommentGenerator的都知道 通过实现CommentGenerator接口的一些不足,毕竟只是实现了CommentGenerator接口,在里面的方法再怎么改,有效的也只是针对model类,并且使用的人大概也发现了,里面的addClassComment方法都知道是在类文件上面生成注释,但是无论我们在这个方法实现里写什么都没有效果,其实因为MGB默认是没有调用这个方法的,这个时候如果有需求希望生成的类文件自动加了类文档说明就办不到了,而如果在源代码的基础上修改,

  • mybatis-generator生成文件覆盖问题的解决

    目录 mybatis-generator生成文件覆盖 解决方案 mybatis-generator避免覆盖自定义的sql方法 mybatis-generator生成文件覆盖 在Idea中使用Mybatis-generator plugin时遇到的问题,我的mybatis配置到的DB的服务中,每次部署微服务时需要install db这个微服务,将其打成jar包,供其他服务引用. 可是发现,我每次install或者package时候,mybatis-generator都会随编译自动运行,导致工程中的

  • mybatis-generator如何自定义注释生成

    目录 前言 正文 1.实现CommentGenerator接口 2.配置generator.xml 3.运行 方法1. java方式(个人推荐) 方法2. maven方式 4.可能出现的问题 4.1 提示找不到MyCommentGenerator 4.2 获取不到字段注释 4.3生成的javabean中字段注释中文乱码 前言 本文写于2016.2,是基于mybatis-generator 1.3.2版本来完成的. 目前正式版的mybatis-generator已更新至1.3.5版本,本文同样适用

  • ES6使用let命令更简单的实现块级作用域实例分析

    本文实例讲述了ES6使用let命令更简单的实现块级作用域.分享给大家供大家参考,具体如下: let 带来了更简单的块级作用域 1. ES6新增了let命令,用于声明变量.其与var的不同在于,用let声明的变量只在 { } 内有效.这使得我们可以很方便的实现块级作用域,不再使用立即实行函数. { let a=1; var b=2; } console.log(a); //undefined console.log(b); //2 在for循环中使用let可以有效避免全局变量污染. 2. let不

  • 让IIS8支持WCF的更简单方法

    以前在IIS8中使用WCF时,总是参考在IIS8服务器添加WCF服务支持的方法进行手工设置: 复制代码 代码如下: 1. 首先添加MIME类型:扩展名".svc",MIME类型 "application/octet-stream": 2. 然后在"Handler Mappings"中添加Managed Handler:Request path: *.svcType: System.ServiceModel.Activation.HttpHandl

  • Smartour 让网页导览变得更简单(推荐)

    本文介绍了Smartour 让网页导览变得更简单,分享给大家,具体如下: 在遇到网页内容有着较大调整的时候,往往需要一个导览功能去告诉用户,某某功能已经调整到另外一个位置.比较常规的办法是添加一个蒙层,高亮显示被调整的区域,然后通过文字介绍去完成引导.我们把这个功能称为"导览",而 Smartour 则把这个导览的功能抽离出来,提供了一个开箱即用的解决方案. 项目地址:https://github.com/jrainlau/smartour 官方示例:https://jrainlau.

  • C++ 17标准正式发布! 更简单地编写和维护代码

    C++17 是继 C++14 之后,C++ 编程语言 ISO/IEC 标准的下一次修订的非正式名称.而就在昨日,ISO C++ 委员会正式发布了 C++ 17 标准,官方名称为 ISO/IEC 14882:2017. C++ 17 标准化图表 C ++ 17 主要特性 基于 C++ 11,C++ 17 旨在使 C++ 成为一个不那么臃肿复杂的编程语言,以简化该语言的日常使用,使开发者可以更简单地编写和维护代码. C++ 17 是对 C++ 语言的重大更新,引入了许多新的语言特性: UTF-8 字

  • python和java哪个学起来更简单

    在近几年Python的呼声越来越高,很多刚开始起步想要学习编程的朋友都会犹豫要不要选择学习Python,毕竟作为人工智能时代的首选语言这个诱惑还是很大的.在选择上最纠结的就是Python和Java选择哪一个比较好.今天千锋小编就告诉大Python比Java简单在哪?Python语言有哪些优势? Python比Java简单在哪 Java是一种严格的类型语言,这意味着必须显式声明变量名.相比之下,动态类型的Python则不需要声明变量.在编程语言上有许多关于动态和静态类型的争论,但有一点应该注意:P

  • java初学者如何让编程学习起来更简单

    如果不喜欢学Java就不要学了,硬要逼着自己去学到头来也会是一知半解.不仅浪费时间,也浪费金钱,如果喜欢Java那就继续学,并且努力学,学好Java会有意想不到的好处.学习Java会有一个很艰难的过渡期,在此期间你要努力学好它并度过它,那么你就成功了.学任何东西,入门的时候,觉得难或者吃力是很正常的事情,小学生学习个加减乘除不也花了三四年的时间吗? 行百里者半九十,从0到1是最艰难最吃力的一步,先慢后快,怕的是中途放弃.而你当年读小学的时候却不会- 1.很多人还没学习JAVA就开始觉得java很

  • c# 如何更简单的使用Polly

    Polly是一个C#实现的弹性瞬时错误处理库 它可以帮助我们做一些容错模式处理,比如: 超时与重试(Timeout and Retry) 熔断器(Circuit Breaker) 舱壁隔离(Bulkhead Isolation) 回退(Fallback) 使用也是非常简单的,比如: // Retry multiple times, calling an action on each retry // with the current exception and retry count Polic

  • 让文件路径提取变得更简单的Python Path库

    一.Path 是什么? 该模块提供表示文件系统路径的类,其语义适用于不同的操作系统.路径类被分为提供纯计算操作而没有 I/O 的 纯路径,以及从纯路径继承而来但提供 I/O 操作的 具体路径. 在一些用例中纯路径很有用,例如: 如果你想要在 Unix 设备上操作 Windows 路径(或者相反).你不应在 Unix 上实例化一个 WindowsPath,但是你可以实例化 PureWindowsPath. 你只想操作路径但不想实际访问操作系统.在这种情况下,实例化一个纯路径是有用的,因为它们没有任

  • Spring更简单的存储方式与获取方式详解

    目录 存储方式(注解) @Controller @Service @Repository @Configuration @Component 方法注解@Bean 重命名bean 五大注解之间的关系 从Spring中获取对象 @Autowired 注入注解 三种注入的优缺点 @Resource @Autowired和@Resource的区别 总结 存储方式(注解) 使用注解的方式存储业务对象到Spring中会更简单 1.配置spring.xml设置spring存入对象的根路径 ,目的是让Sprin

  • Android指纹识别API讲解,一种更快更好的用户体验

    我发现了一个比较怪的现象.在iPhone上使用十分普遍的指纹认证功能,在Android手机上却鲜有APP使用,我简单观察了一下,发现Android手机上基本上只有支付宝.微信和极少APP支持指纹认证功能,就连银行和金融类的应用都基本不支持,甚至很多开发者都不知道Android系统是有指纹认证的官方API的. 事实上,Android从6.0系统开始就支持指纹认证功能了,但是指纹功能还需要有硬件支持才行,而Android手机的硬件都是由各厂商生产的,手机档次也参差不齐,因此不能像iPhone那样保证

随机推荐