maven
9 小时以前 d9ff3817f056ad245a16bd394133a407d6c6b9cf
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
package com.ruoyi;
 
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableField;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
 
import java.util.Collections;
import java.util.Scanner;
 
// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
public class CodeGenerator {
 
    public static String database_url = "jdbc:mysql://127.0.0.1:3306/product-inventory-management";
    public static String database_username = "root";
    public static String database_password= "123456";
    public static String author = "芯导软件(江苏)有限公司";
    public static String model = "collaborativeApproval"; // 模块
    public static String setParent = "com.ruoyi."+ model; // 包路径
    public static String tablePrefix = ""; // 设置过滤表前缀
    public static void main(String[] args) {
        String projectPath = System.getProperty("user.dir");
        FastAutoGenerator.create(database_url, database_username, database_password)
                // 全局配置
                .globalConfig(builder -> {
                    builder.author(author) // 设置作者
                            .commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
                            .outputDir(projectPath  + "/src/main/java") // 指定输出目录
                            .disableOpenDir() //禁止打开输出目录,默认打开
                            .enableSwagger() // 开启swagger
 
                    ;
                })
                // 数据源配置(核心:自定义类型转换,强制tenant_id为Long)
                .dataSourceConfig(builder -> {
                    builder.typeConvert(new MySqlTypeConvert() {
                        /**
                         * 自定义字段类型转换
                         * @param globalConfig 全局配置
                         * @param tableField 表字段信息
                         * @return 转换后的字段类型
                         */
                        @Override
                        public DbColumnType processTypeConvert(GlobalConfig globalConfig, TableField tableField) {
                            // 强制tenant_id字段类型为Long
                            if ("tenant_id".equalsIgnoreCase(tableField.getName())) {
                                return DbColumnType.LONG;
                            }
                            // 其他字段使用默认转换规则
                            return (DbColumnType) super.processTypeConvert(globalConfig, tableField);
                        }
                    });
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.entity("pojo");
                    builder.parent(setParent) // 设置父包名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath  +  "/src/main/resources/"+model+"/mapper")); // 设置mapperXml生成路径
                })
                // 策略配置
                .strategyConfig(builder -> {
                    builder.addInclude(scanner("表名,多个空格分割").split(" ")) // 设置需要生成的表名
                            .addTablePrefix(tablePrefix) // 设置过滤表前缀
                            // Entity 策略配置
                            .entityBuilder()
                            .enableLombok() //开启 Lombok
                            .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命
                            .columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命
                            .enableFileOverride() // 覆盖已经生成的Entity文件
                            .logicDeleteColumnName("state")
                            .addTableFills(
                                    new Column("create_time", FieldFill.INSERT),
                                    new Column("update_time", FieldFill.INSERT_UPDATE),
                                    new Column("create_user", FieldFill.INSERT),
                                    new Column("update_user", FieldFill.INSERT_UPDATE),
                                    new Column("tenant_id", FieldFill.INSERT)
                            )
                            .idType(IdType.AUTO) // 自增主键
 
                            // Mapper 策略配置
                            .mapperBuilder()
                            .enableFileOverride() // 覆盖已生成Mapper文件
                            .enableBaseResultMap() // 自动生成resultMap
                            .mapperAnnotation(org.apache.ibatis.annotations.Mapper.class)
 
                            // Service 策略配置
                            .serviceBuilder()
                            .formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
                            .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl
                            .enableFileOverride() // 覆盖已生成文件
 
                            // Controller 策略配置
                            .controllerBuilder()
                            .enableFileOverride() // 覆盖已生成文件
                            .enableRestStyle() // 开启生成@RestController 控制器
                    ;
                })
                //5、模板引擎
                .templateEngine(new FreemarkerTemplateEngine())    //默认
                .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 + "!");
    }
}