XiaoRuby
2023-07-28 a33396e17dd847f31b62f416f7d9c5a58b79126b
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
package com.yuanchu.limslaboratory;
 
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
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;
import java.util.Scanner;
 
// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
public class CodeGenerator {
 
    public static String database_url = "jdbc:mysql://localhost:3306/lims_laboratory?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
    public static String database_driver_name = "com.mysql.cj.jdbc.Driver";
    public static String database_username = "root";
    public static String database_password= "123456";
    public static String author = "江苏鵷雏网络科技有限公司";
    public static String model_name = "/laboratory-server"; // 如果为分布式填子模块名称,如果不是分布式为空即可
    public static String setParent = "com.yuanchu.limslaboratory"; // 包路径
    public static Boolean Override = false; // 是否覆盖原来的文件?
 
    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
 
        String projectPath = System.getProperty("user.dir");
        System.out.println(projectPath+"===================");
 
        GlobalConfig gc = new GlobalConfig() // 全局配置
                .setOutputDir(projectPath + model_name + "/src/main/java") // 输出路径
                .setAuthor(author) // 作者注释
                .setOpen(false) // 是否打开
                .setSwagger2(true) //实体属性 Swagger2 注解
                .setServiceName("%sService") // 设置serviceName的名称去大写I
                .setFileOverride(Override);// 是否覆盖已生成文件
        mpg.setGlobalConfig(gc);
 
        // 数据源配置 数据库名 账号密码
        DataSourceConfig dsc = new DataSourceConfig()
                .setUrl(database_url)
                .setDriverName(database_driver_name)
                .setUsername(database_username)
                .setPassword(database_password);
        mpg.setDataSource(dsc);
 
 
        // 包配置
        PackageConfig pc = new PackageConfig()
                .setModuleName(null)
                .setParent(setParent)
                .setEntity("pojo");// 包路径
        mpg.setPackageInfo(pc);
 
        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
 
        // 如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 如果模板引擎是 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 + model_name + "/src/main/resources/mapper/"
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
 
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
 
        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig()
                .setXml(null);
 
        mpg.setTemplate(templateConfig);
 
        // 策略配置
        StrategyConfig strategy = new StrategyConfig()
                .setNaming(NamingStrategy.underline_to_camel)
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setEntityLombokModel(true)
                .setRestControllerStyle(true)
                .setInclude(scanner("表名,多个道号分割").split(","))
                .setControllerMappingHyphenStyle(true)
                .setTablePrefix("m_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        //如果不调用该方法、就会使用MyBatis-Plus默认的文件生成路径和包路径生成文件、但可以使用上面的PackageConfig做一些简单的配置
        mpg.execute();
    }
 
    /**
     * <p>
     * 读取控制台内容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
 
            if (StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }
}