Singerw's Repository Singerw's Repository
首页
  • 相关文章

    • HTML相关文章
    • CSS相关文章
    • JavaScript相关文章
  • 学习笔记

    • JavaScript笔记
    • ES6笔记
    • Vue笔记
  • 相关文章

    • Spring相关文章
    • SpringBoot相关文章
    • MyBatis相关文章
    • MySQL相关文章
  • 学习笔记

    • SpringBoot笔记
    • Spring笔记
    • MyBatis笔记
    • MySQL笔记
    • JavaWeb笔记
    • JavaCore笔记
  • 学习笔记

    • Linux笔记
    • Git笔记
    • 技术文档
  • 偏门技术

    • GitHub技巧
    • 博客搭建
    • 科学上网
  • 安装教程

    • JDK
    • MySQL
    • Node.js
    • Linux
  • 终身学习
  • 面试人生
  • 心情杂货
  • 生活随笔
  • 归档
  • 标签
GitHub (opens new window)

Singerw

谁能够凭爱意将富士山私有
首页
  • 相关文章

    • HTML相关文章
    • CSS相关文章
    • JavaScript相关文章
  • 学习笔记

    • JavaScript笔记
    • ES6笔记
    • Vue笔记
  • 相关文章

    • Spring相关文章
    • SpringBoot相关文章
    • MyBatis相关文章
    • MySQL相关文章
  • 学习笔记

    • SpringBoot笔记
    • Spring笔记
    • MyBatis笔记
    • MySQL笔记
    • JavaWeb笔记
    • JavaCore笔记
  • 学习笔记

    • Linux笔记
    • Git笔记
    • 技术文档
  • 偏门技术

    • GitHub技巧
    • 博客搭建
    • 科学上网
  • 安装教程

    • JDK
    • MySQL
    • Node.js
    • Linux
  • 终身学习
  • 面试人生
  • 心情杂货
  • 生活随笔
  • 归档
  • 标签
GitHub (opens new window)
  • MyBatis学习笔记

  • MyBatis-Plus学习笔记

    • 《MyBatis-Plus》学习笔记
    • MyBatis-Plus—配置日志
    • MyBatis-Plus—主键生成策略
    • MyBatis-Plus—日期时间自动填充
    • MyBatis-Plus—性能分析插件
    • MyBatis-Plus—条件构造器(wrapper)
    • MyBatis-Plus—代码自动生成器
  • 《MyBatis》学习笔记
  • MyBatis-Plus学习笔记
Singerw
2021-10-07

MyBatis-Plus—代码自动生成器

# MyBatis-Plus—代码自动生成器

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

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;

// 代码自动生成器
public class KuangCode {
    public static void main(String[] args) {
        // 需要构建一个 代码自动生成器 对象
        AutoGenerator mpg = new AutoGenerator();
        // 配置策略
        // 1、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath+"/src/main/java");
        gc.setAuthor("狂神说");
        gc.setOpen(false);
        gc.setFileOverride(false); // 是否覆盖
        gc.setServiceName("%sService"); // 去Service的I前缀
        gc.setIdType(IdType.ID_WORKER);
        gc.setDateType(DateType.ONLY_DATE);
        gc.setSwagger2(true);
        mpg.setGlobalConfig(gc);
        //2、设置数据源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/kuang_community?
                   useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
                   dsc.setDriverName("com.mysql.cj.jdbc.Driver");
                   dsc.setUsername("root");
                   dsc.setPassword("123456");
                   dsc.setDbType(DbType.MYSQL);
                   mpg.setDataSource(dsc);
                   //3、包的配置
                   PackageConfig pc = new PackageConfig();
                   pc.setModuleName("blog");
                   pc.setParent("com.kuang");
                   pc.setEntity("entity");
                   pc.setMapper("mapper");
                   pc.setService("service");
                   pc.setController("controller");
                   mpg.setPackageInfo(pc);
                   //4、策略配置
                   StrategyConfig strategy = new StrategyConfig();
                   strategy.setInclude("blog_tags","course","links","sys_settings","user_record","
                                       user_say"); // 设置要映射的表名
                                       strategy.setNaming(NamingStrategy.underline_to_camel);
                                       strategy.setColumnNaming(NamingStrategy.underline_to_camel);
                                       strategy.setEntityLombokModel(true); // 自动lombok;
                                       strategy.setLogicDeleteFieldName("deleted");
                                       // 自动填充配置
                                       TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
                                       TableFill gmtModified = new TableFill("gmt_modified",
                                                                             FieldFill.INSERT_UPDATE);
                                       ArrayList<TableFill> tableFills = new ArrayList<>();
                                       tableFills.add(gmtCreate);
                                       tableFills.add(gmtModified);
                                       strategy.setTableFillList(tableFills);
                                       // 乐观锁
                                       strategy.setVersionFieldName("version");
                                       strategy.setRestControllerStyle(true);
                                       strategy.setControllerMappingHyphenStyle(true); //
                                       localhost:8080/hello_id_2
                                       mpg.setStrategy(strategy);
                                       mpg.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

企业级别

package com.onesports.office.material.generator;

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.BeetlTemplateEngine;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

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

/**
 * mybatisplus代码生成器
 *
 * @author yangaj
 **/
@Component
public class MybatisplusGenerator {

    @Value("${spring.datasource.url}")
    private String dataSourceUrl;
    @Value("${spring.datasource.driver-class-name}")
    private String dataSourceDriver;
    @Value("${spring.datasource.username}")
    private String dataSourceUsername;
    @Value("${spring.datasource.password}")
    private String dataSourcePwd;
    @Value("${mybatis-plus.global-config.author}")
    private String author;
    @Value("${mybatis-plus.global-config.module}")
    private String module;
    @Value("${mybatis-plus.package-config.biz-module}")
    private String bizModuleName;
    @Value("${mybatis-plus.package-config.parent-path}")
    private String parentPath;
    @Value("${mybatis-plus.strategy-config.table-name}")
    private String tableName;
    @Value("${mybatis-plus.strategy-config.super-entity-class}")
    private String superEntityClass;

    public void generate() {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        String outputDir = projectPath.replaceAll("office-material-generator", module);
        //根据需求开关   数据库json属性转换自定义sql需要引用
        gc.setBaseResultMap(true);
        gc.setOutputDir(outputDir + "/src/main/java");
        gc.setAuthor(author);
        gc.setOpen(false);
        gc.setFileOverride(true);
        gc.setServiceImplName("%sService");
        gc.setSwagger2(true); //实体属性 Swagger2 注解
        mpg.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl(dataSourceUrl);
        // dsc.setSchemaName("public");
        dsc.setDriverName(dataSourceDriver);
        dsc.setUsername(dataSourceUsername);
        dsc.setPassword(dataSourcePwd);
        mpg.setDataSource(dsc);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("");
        pc.setParent(parentPath);
        pc.setEntity("beans.entity.".concat(bizModuleName));
        pc.setMapper("mapper.".concat(bizModuleName));
        pc.setController("");
        pc.setService("");
        pc.setServiceImpl("service.".concat(bizModuleName));
        mpg.setPackageInfo(pc);

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };

        // 如果模板引擎是 freemarker
        //模板引擎beetl
        String templatePath = "/templates/mapper.xml.btl";
        // 如果模板引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";

        // 自定义输出配置
        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() + "/"
                // 修改成要生成的业务模块名 如: base,sys,shedule

                return outputDir + "/src/main/resources/mapper/" + bizModuleName + "/"
                    + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        /*
        cfg.setFileCreate(new IFileCreate() {
            @Override
            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                // 判断自定义文件夹是否需要创建
                checkDir("调用默认方法创建的目录");
                return false;
            }
        });
        */
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();

        // 配置自定义输出模板
        //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
        //        templateConfig.setEntity("templates/entity.java");
        templateConfig.setService("");
        templateConfig.setServiceImpl("templates/manager.java");
        templateConfig.setController("");

        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setSuperEntityClass(superEntityClass);
        strategy.setEntityLombokModel(true);
        strategy.setChainModel(true);
        strategy.setRestControllerStyle(true);
        strategy.setTablePrefix("1tmm_");
        //        strategy.setFieldPrefix("1tpm_");
        //        strategy.setEntityBooleanColumnRemoveIsPrefix(true);
        // 公共父类 你自己的父类控制器,没有就不用设置!
        //        strategy.setSuperControllerClass("");
        // 写于父类中的公共字段
        strategy.setSuperEntityColumns("id", "create_by", "create_time", "modified_by", "modified_time", "count", "is_delete");
        strategy.setInclude(tableName.split(","));
        strategy.setControllerMappingHyphenStyle(true);
        //        strategy.setTablePrefix(pc.getModuleName() + "_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new BeetlTemplateEngine());
        mpg.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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
编辑 (opens new window)
#MyBatis-Plus
MyBatis-Plus—条件构造器(wrapper)

← MyBatis-Plus—条件构造器(wrapper)

最近更新
01
Maven资源导出问题终极版
10-12
02
《MyBatis-Plus》学习笔记
10-07
03
MyBatis-Plus—配置日志
10-07
更多文章>
Theme by Vdoing | Copyright © 2020-2021 版权所有 | repository.singerw.com
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×