MyBatisPlus代码生成器实践(自己二次封装)

 更新时间:2026年05月31日 10:15:13   作者:长路 ㅤ  
这段描述主要讲解了如何配置MybatisPlus以生成代码,并强调了官方文档的重要性,同时提到了.xml文件的放置位置以及自动扫描的功能,适合对MybatisPlus感兴趣的开发者阅读

前提准备

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

核心配置

前提说明

你只需要配置一下内容之后即可按照指定内容来进行生成代码:

代码配置

修改请认准官方文档—baomidou(MybatisPlus):

https://mp.baomidou.com/config/generator-config.html#%E6%95%B0%E6%8D%AE%E6%BA%90-datasourceconfig-%E9%85%8D%E7%BD%AE

将下面代码直接粘贴,修改配置即可使用:

package com.changlu.demo;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * @author ChangLu
 * @date 2021/09/22 16:38
 * @Desc 封装之后的代码生成器,仅需填写几个核心配置即可
 * 
 *  核心依赖
    *  <dependency>       
    *      <groupId>com.baomidou</groupId>       
    *      <artifactId>mybatis-plus-generator</artifactId>       
    *      <version>3.4.1</version>       
    *  </dependency>       
    *  <dependency>       
    *      <groupId>mysql</groupId>       
    *      <artifactId>mysql-connector-java</artifactId>       
    *      <scope>runtime</scope>       
    *  </dependency>       
    *  <dependency>       
    *      <groupId>org.apache.velocity</groupId>       
    *      <artifactId>velocity-engine-core</artifactId>       
    *      <version>2.0</version>       
    *  </dependency>       
 *  其他依赖如:lombok、swagger3
 **/
public class MyCodeGenerator {

    //核心配置
    private static String targetDatabaseName = "dj.svublog.rdb";//目标数据库名
    private static String username = "root";//用户名
    private static String password = "123456";//密码
    private static String[] tihuan_table_prefix = {"sys_"}; //表替换前缀,可多个
    private static String[] paichu_table_name = {"sys_member_role","sys_role_permission"}; //排除指定表,可多个
    private static String referenceModule = "com.changlu.demo"; //当前的引用模块,如com.changlu.demo
    private static String targetModule = "test"; //输出指定文件目录的包名 如:test

    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        //全局配置(若是多模块的话传入对应模块的工程名!)
        mpg.setGlobalConfig(createGlobalConfig(null));
//        mpg.setGlobalConfig(createGlobalConfig(common));
        //数据库源
        mpg.setDataSource(createDataSourceConfig());
        //包配置
        mpg.setPackageInfo(createPackageConfig());
        //策略配置
        mpg.setStrategy(createStrategyConfig());
        //默认Velocity模板生成
//        mpg.setTemplateEngine(new FreemarkerTemplateEngine());  //其他模板Freemarker

        //执行操作
        mpg.execute();
    }
    // 1、全局配置  若是多模块,传入指定父模块名称
    private static GlobalConfig createGlobalConfig(String parentModuleName){
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");//获取到当前工程路径地址,若是多模块情况就会有问题
        if(parentModuleName != null){
            projectPath = projectPath + "/"+parentModuleName+ "/src/main/java";
        }else{
            projectPath = projectPath + "/src/main/java";
        }
        gc.setOutputDir(projectPath)
                .setAuthor("ChangLu") //设置作者
                .setOpen(false) //不打开输出目录
                .setSwagger2(true) //添加swagger2注解
                .setBaseResultMap(true) //每个mapper文件中都生成通用结果映射集
                .setFileOverride(true) //下次生成文件时进行覆盖(不设置的话当进行第二次生成就会在同一个目录产生相同的文件)
                .setEntityName("%sModel") //生成实体类文件名,如:%sModel 生成 UserModel
                .setMapperName("%sMapper") //生成dao,这里我们配置生成如 UserMapper
                .setMapperName("%sMapper") //生成mapper.xml文件,这里生成如 UserMapper.xml
                .setServiceName("%sService") //生成service接口
                .setServiceImplName("%sServiceImpl");//生成service实现类
        return gc;
    }

    // 2、数据库源
    private static DataSourceConfig createDataSourceConfig(){
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/+"+targetDatabaseName+"+?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai")
            .setDriverName("com.mysql.cj.jdbc.Driver")
            .setUsername(username)
            .setPassword(password);
        //转换类型  LocalDateTime=>Date
        dsc.setTypeConvert((globalConfig, fieldType) -> {
            String t = fieldType.toLowerCase();
            if(t.contains("datetime")){   //若是匹配到数据库类型为"datetime",就返回Date类型(转为Java的)
                return DbColumnType.DATE;
            }
            //其它字段采用默认转换(非mysql数据库可以使用其它默认的数据库转换器)
            return new MySqlTypeConvert().processTypeConvert(globalConfig,fieldType);
        });
        return dsc;
    }

    //3、包配置
    private static PackageConfig createPackageConfig(){
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(targetModule) //生成的模块名,也就是生成目标指定文件名的路径下
          .setParent(referenceModule); //父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
        return pc;
    }

    //4、策略配置
    private static StrategyConfig createStrategyConfig(){
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel) //表名生成策略:下划线转驼峰,如pms_pro=>PmsPro
                .setColumnNaming(NamingStrategy.underline_to_camel) //字段名生成策略,同上,如last_name=>lastName
                .setEntityLombokModel(true) //支持lombok注解
                .setTablePrefix(tihuan_table_prefix) //设置表的替换前缀:这里就是起到过滤作用
                .setEntityTableFieldAnnotationEnable(true) //生成表、字段映射注解
                .setExclude(paichu_table_name); //排除指定表
        return strategy;
    }
}

对应的.xml文件可以放置在resource/mapper目录下,会自动扫到

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot 实战 之 优雅终止服务的方法

    SpringBoot 实战 之 优雅终止服务的方法

    本篇文章主要介绍了SpringBoot 实战 之 优雅终止服务的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Mybatis-Plus 搭建与使用入门(小结)

    Mybatis-Plus 搭建与使用入门(小结)

    Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,这篇文章主要介绍了Mybatis-Plus 搭建与使用入门(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • IDEA使用jformdesigner插件做管理系统MVC架构的步骤和实现思路

    IDEA使用jformdesigner插件做管理系统MVC架构的步骤和实现思路

    在 IntelliJ IDEA 中结合 JFormDesigner 插件,通过 Swing 框架实现一个管理系统的 MVC 架构是一种经典的开发方式,以下是具体的步骤和实现思路,包含从项目创建到 MVC 架构的核心代码实现,需要的朋友可以参考下
    2024-12-12
  • PL/SQL实现JAVA中的split()方法的例子

    PL/SQL实现JAVA中的split()方法的例子

    这篇文章主要介绍了PL/SQL实现JAVA中的split()方法的例子的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • MybatisPlus:使用SQL保留字(关键字)的操作

    MybatisPlus:使用SQL保留字(关键字)的操作

    这篇文章主要介绍了MybatisPlus:使用SQL保留字(关键字)的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 详解JAVA 反射机制

    详解JAVA 反射机制

    这篇文章主要介绍了JAVA 反射机制的相关知识,文中讲解的非常细致,代码帮助大家更好的理解学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java如何导出包含多个Sheet的Excel文件

    Java如何导出包含多个Sheet的Excel文件

    这篇文章主要为大家详细介绍了Java如何导出包含多个Sheet的Excel文件,文中一共介绍了两种实现方法,有需要的小伙伴可以跟随小编一起学习一下
    2025-07-07
  • Java多线程执行处理业务时间太久解决方法代码示例

    Java多线程执行处理业务时间太久解决方法代码示例

    这篇文章主要介绍了Java多线程执行处理业务时间太久解决方法代码示例的相关资料,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 解决springboot依赖包中报错unknown的问题

    解决springboot依赖包中报错unknown的问题

    这篇文章主要介绍了解决springboot依赖包中报错unknown的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 浅谈Java中Collection和Collections的区别

    浅谈Java中Collection和Collections的区别

    下面小编就为大家带来一篇浅谈Java中Collection和Collections的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08

最新评论