目录

MyBatis-Plus代码生成器

# MyBatis-Plus代码生成器

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

官网 (opens new window)演示效果图:

generator.gif

# 使用方法:

# 添加依赖

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 编写配置

package com.as.mybatisplus.util;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.List;

/**
 * @author worth
 */

public class CodeGenerator {

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

        // 全局策略配置
        GlobalConfig globalConfig = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        //生成文件的输出目录
        globalConfig.setOutputDir(projectPath + "/src/main/java/");
        // 开发人员
        globalConfig.setAuthor("worthy");
        // 是否打开输出目录
        globalConfig.setOpen(false);
        // 是否覆盖已有文件
        globalConfig.setFileOverride(true);
        // 时间类型对应策略 (默认生成的domain时间日期类型为LocalDateTime需自行修改)
        // globalConfig.setDateType(DateType.TIME_PACK);
        // 实体命名方式(如下配置 %s 为占位符)
        globalConfig.setEntityName("%s");
        // mapper 命名方式
        globalConfig.setMapperName("%sMapper");
        // Mapper xml 命名方式
        globalConfig.setXmlName("%sMapper");
        // service 命名方式
        globalConfig.setServiceName("%sService");
        // service impl 命名方式
        globalConfig.setServiceImplName("%sServiceImpl");
        // controller 命名方式
        globalConfig.setControllerName("%sController");
        // 指定生成的主键的ID类型
        globalConfig.setIdType(IdType.AUTO);
        autoGenerator.setGlobalConfig(globalConfig);

        // 数据源配置,通过该配置,指定需要生成代码的具体数据库
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        // 驱动连接的URL
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/as_shop_db?serverTimezone=Hongkong");
        // 驱动名称 mysql低版本使用("com.mysql.jdbc.Driver")
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        // 数据库连接用户名
        dataSourceConfig.setUsername("root");
        // 数据库连接密码
        dataSourceConfig.setPassword("123456");
        autoGenerator.setDataSource(dataSourceConfig);

        // 包名配置,通过该配置,指定生成代码的包路径
        PackageConfig pc = new PackageConfig();
        // 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
        pc.setParent("com.as.mybatisplus");
        // Entity包名
        pc.setEntity("domain");
        // Service包名
        pc.setService("service");
        // Service Impl包名
        pc.setServiceImpl("service.Impl");
        // Mapper包名
        pc.setMapper("dao");
        // Controller包名
        pc.setController("controller");
        // Mapper XML包名
        pc.setXml("mapper");
        autoGenerator.setPackageInfo(pc);

        // 注入配置,通过该配置,可注入自定义参数等操作以实现个性化操作
        InjectionConfig injectionConfig = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        // 如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 自定义输出配置 主要用于输出mapper.xml
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        injectionConfig.setFileOutConfigList(focList);
        autoGenerator.setCfg(injectionConfig);

        // 模板配置,可自定义代码生成的模板,实现个性化操作
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);
        autoGenerator.setTemplate(templateConfig);

        // 数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表
        StrategyConfig strategyConfig = new StrategyConfig();
        // 数据库表映射到实体的命名策略
        strategyConfig.setNaming(NamingStrategy.no_change);
        // 表前缀
        strategyConfig.setTablePrefix("tb_");
        // 是否跳过视图
        strategyConfig.setSkipView(true);
        // 数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
        strategyConfig.setColumnNaming(NamingStrategy.no_change);
        // 【实体】是否为lombok模型(默认 false)
        strategyConfig.setEntityLombokModel(true);
        // 生成 @RestController 控制器
        strategyConfig.setRestControllerStyle(true);
        // 是否生成实体时,生成字段注解
        strategyConfig.setEntityTableFieldAnnotationEnable(true);
        // 需要包含的表名,当enableSqlFilter为false时,允许正则表达式(与exclude二选一配置)
        //strategyConfig.setInclude(scanner("表名,多个英文逗号分割").split(","));
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
        autoGenerator.execute();
    }

}
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135

执行 main 方法即可,更多详细配置,请参考代码生成器配置 (opens new window)一文。

上次更新: 2024/03/20, 23:57:47
最近更新
01
使用 acme.sh 自动化SSL证书管理
03-25
02
COSCLI 的使用记录
03-25
03
腾讯云命令行工具 TCCLI
03-25
更多文章>