无关风月
2024-09-03 56dfe0d4bf81262622a1919cceb2b039fd356209
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package com.ruoyi.management.util;
 
 
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
 
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
 
 
/**
 * @author hjl
 */
@SuppressWarnings("AlibabaRemoveCommentedCode")
public class GeneratorCodeConfig {
 
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in, "utf-8");
        System.out.println("请输入" + tip + ":");
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }
 
    public static void main(String[] args) {
        // 数据库连接url
        String dbUrl = "jdbc:mysql://localhost:3306/forest_management";
        // 数据库用户名
        String dbUsername = "root";
        // 数据库密码
        String dbPassword = "123456";
        FastAutoGenerator.create(dbUrl, dbUsername, dbPassword)
                // 全局配置
                .globalConfig(builder -> builder
                        // 禁止打开输出目录
                        .disableOpenDir()
                        // 设置输出目录
                        .outputDir(System.getProperty("user.dir") + "/src/main/java")
                        // 设置作者信息
                        .author("hjl")
                        // 开启 swagger 模式
                        .enableSwagger()
                        // 实体类中时间策略
                        .dateType(DateType.ONLY_DATE)
                        // 生成日期
                        .commentDate("yyyy-MM-dd")
                )
 
                // 包配置
                .packageConfig(builder -> builder
                                // 父包名
                                .parent("com.rouyi.management")
                                // 父包模块名 注释即为无
//                         .moduleName(scanner("模块名"))
                                // Entity 包名
                                .entity("domain")
                                // Service 包名
                                .service("service")
                                // Service Impl 包名
                                .serviceImpl("service.impl")
                                // Mapper 包名 dao层
                                .mapper("mapper")
                                // Mapper XML 包名
                                .xml("mapper")
                                // Controller 包名
                                .controller("controller")
                                // other(String)
                                .other("utils")
                                // 将Mapper xml生成到resources目录下
                                .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper/" + scanner("模块名,xml里面生成包")))
                )
 
                // 策略配置
                .strategyConfig((scanner, builder) -> {
                    // 需要生成得表
                    builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
                            // 开启大写命名
                            // .enableCapitalMode()
                            // 开启跳过视图
                            // .enableSkipView()
                            // 增加过滤表前缀
                            .addTablePrefix("ot_", "b_", "iot_", "sys_", "t_")
                            // 增加过滤表后缀
                            .addTableSuffix("_n")
                            // 增加过滤字段前缀
                            .addFieldPrefix("")
                            // 增加过滤字段后缀
                            .addFieldSuffix("")
 
                            // 实体策略配置
                            .entityBuilder()
                            // 禁用生成 serialVersionUID
                            .disableSerialVersionUID()
                            // 开启链式模型
                            // .enableChainModel()
                            // 开启 lombok 模型
                            .enableLombok()
                            // 开启生成实体时生成字段注解
                            .enableTableFieldAnnotation()
                            // 乐观锁字段名(数据库)
                            .versionColumnName("version")
                            // 乐观锁属性名(实体)
                            .versionPropertyName("version")
                            // 逻辑删除字段名(数据库)
                            .logicDeleteColumnName("deleted")
                            // 逻辑删除属性名(实体)
                            .logicDeletePropertyName("deleted")
                            //     数据库表映射到实体的命名策略 -- 下划线转驼峰命名
                            .naming(NamingStrategy.underline_to_camel)
                            // 数据库表字段映射到实体的命名策略 -- 下划线转驼峰命名
                            .columnNaming(NamingStrategy.underline_to_camel)
 
                            // 阿里巴巴开发规范之创建时间、更新时间 交由mybatis-plus处理,如若交给数据库处理,则取消此设置
                            // .addTableFills(new Column("create_time", FieldFill.INSERT), new Column("update_time", FieldFill.INSERT_UPDATE))
                            // mapper 策略配置
                            .mapperBuilder()
                            // 设置父类
                            .superClass(BaseMapper.class)
                            // 格式化 mapper 文件名称
                            .formatMapperFileName("%sMapper")
                            // 格式化 xml 实现类文件名称
                            .formatXmlFileName("%sMapper")
                            // 开启 @Mapper 注解
                            .enableMapperAnnotation()
                            // 生成通用的resultMap
                            .enableBaseResultMap()
 
                            // service 策略配置
                            .serviceBuilder()
                            // 格式化 service 接口文件名称
                            .formatServiceFileName("%sService")
                            // 格式化 service 实现类文件名称
                            .formatServiceImplFileName("%sServiceImpl")
 
                            // controller 策略配置
                            .controllerBuilder()
                            // 格式化文件名称
                            .formatFileName("%sController")
                            // 开启生成@RestController 控制器
                            .enableRestStyle();
                })
                // 以下为解决实体类data注解,若不需要则可以注释
                // ------------------开始-------------------
                /*.templateConfig(builder -> {
                    // 实体类使用我们自定义模板 -- 模板位置
                    builder.entity("templates/myEntity.java");
                })*/
                .templateEngine(new FreemarkerTemplateEngine())
                // ------------------结束-------------------
                // 开始处理
                .execute();
        System.out.println("------end------");
    }
 
 
    /**
     * 处理 all 情况
     **/
    public static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
}