懒羊羊
2023-08-30 1ac2bc1590406d9babec036e154d8d08f34a6aa1
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
package cn.stylefeng.guns.gen.core.generator.base;
 
 
import cn.stylefeng.guns.gen.core.engine.GunsMpVelocityTemplateEngine;
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 lombok.extern.slf4j.Slf4j;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * 代码生成器规范
 *
 * @author fengshuonan
 * @date 2018-12-12-2:41 PM
 */
@Slf4j
public abstract class AbstractMpGenerator extends Generator {
 
    /**
     * mybatis-plus代码生成器配置
     */
    protected GlobalConfig globalConfig = new GlobalConfig();
 
    protected DataSourceConfig dataSourceConfig = new DataSourceConfig();
 
    protected StrategyConfig strategyConfig = new StrategyConfig();
 
    protected PackageConfig packageConfig = new PackageConfig();
 
    protected TemplateConfig templateConfig = new TemplateConfig();
 
    protected InjectionConfig injectionConfig = new InjectionConfig() {
        @Override
        public void initMap() {
            Map<String, String> packageInfo = this.getConfig().getPackageInfo();
            if (this.getMap() != null && this.getMap().size() > 0) {
                for (Map.Entry<String, Object> entry : this.getMap().entrySet()) {
                    packageInfo.put(entry.getKey(), (String) entry.getValue());
                }
            }
        }
    };
 
    /**
     * mybatis plus生成之后可以获取到他的table元数据,加以利用
     */
    protected List<TableInfo> tableInfos = null;
    protected Map<String, Map<String, Object>> everyTableContexts = new HashMap<>();
 
    /**
     * 执行mybatis-plus的代码生成
     *
     * @author fengshuonan
     * @Date 2018/12/13 11:36 AM
     */
    @Override
    public void doGeneration() {
 
        beforeGeneration();
 
        AutoGenerator autoGenerator = new AutoGenerator();
 
        //使用重写版的mp代码生成器
        autoGenerator.setTemplateEngine(new GunsMpVelocityTemplateEngine());
 
        autoGenerator.setGlobalConfig(globalConfig);
        autoGenerator.setDataSource(dataSourceConfig);
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.setTemplate(templateConfig);
        autoGenerator.setPackageInfo(packageConfig);
        autoGenerator.setCfg(injectionConfig);
        autoGenerator.execute();
 
        //获取table信息,用于其他代码生成
        tableInfos = autoGenerator.getConfig().getTableInfoList();
 
        //获取mp代码生成时候的所有变量
        for (TableInfo tableInfo : tableInfos) {
            Map<String, Object> tableContextMap = autoGenerator.getTemplateEngine().getObjectMap(tableInfo);
            everyTableContexts.put(tableInfo.getName(), tableContextMap);
        }
 
        afterGeneration();
    }
 
    public List<TableInfo> getTableInfos() {
        return tableInfos;
    }
 
    public Map<String, Map<String, Object>> getEveryTableContexts() {
        return everyTableContexts;
    }
}