zoukankan      html  css  js  c++  java
  • mybatis-plus-generator 实践

    package com.company.project.generator;
    
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.InjectionConfig;
    import com.baomidou.mybatisplus.generator.config.*;
    import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
    import com.baomidou.mybatisplus.generator.config.po.TableFill;
    import com.baomidou.mybatisplus.generator.config.po.TableInfo;
    import com.baomidou.mybatisplus.generator.config.rules.DateType;
    import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
    import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    
    public class MyBatisPlusGeneratorAnt {
    
        public static void main(String[] args) {
    
            String projectPath = System.getProperty("user.dir");
    
            // 自定义需要填充的字段
            List<TableFill> tableFillList = new ArrayList<TableFill>();
            //如 每张表都有一个创建时间、修改时间
            //而且这基本上就是通用的了,新增时,创建时间和修改时间同时修改
            //修改时,修改时间会修改,
            //虽然像Mysql数据库有自动更新几只,但像ORACLE的数据库就没有了,
            //使用公共字段填充功能,就可以实现,自动按场景更新了。
            //如下是配置
            TableFill sysCreateTime = new TableFill("create_time", FieldFill.INSERT);
            TableFill sysUpdateTime = new TableFill("update_time", FieldFill.UPDATE);
            TableFill sysCreateBy = new TableFill("create_by", FieldFill.INSERT);
            TableFill sysUpdateBy = new TableFill("update_by", FieldFill.UPDATE);
            tableFillList.add(sysCreateTime);
            tableFillList.add(sysUpdateTime);
            tableFillList.add(sysCreateBy);
            tableFillList.add(sysUpdateBy);
    
            // 1. 全局配置
            GlobalConfig config = new GlobalConfig();
            // 是否支持AR模式
            config.setActiveRecord(true)
                    // 作者
                    .setAuthor("test@company.com")
                    // 生成路径
                    .setOutputDir(projectPath + "/src/main/java/")
                    // 文件覆盖
                    .setFileOverride(true)
                    // 主键策略
                    .setIdType(IdType.AUTO)
                    // 设置生成的service接口的名字的首字母是否为I,例如IEmployeeService
                    .setServiceName("%sService")
                    //生成基本的resultMap
                    .setBaseResultMap(true)
                    //生成基本的SQL片段
                    .setBaseColumnList(true)
                    //生成后打开文件夹
                    .setOpen(false).setDateType(DateType.ONLY_DATE);
    
            // 2. 数据源配置
            DataSourceConfig dsConfig = new DataSourceConfig();
            // 设置数据库类型
            dsConfig.setDbType(DbType.MYSQL)
                    .setDriverName("com.mysql.cj.jdbc.Driver")
                    .setUrl("jdbc:mysql://localhost:3306/test")
                    .setUsername("root")
                    .setPassword("root")
                    .setTypeConvert(new MySqlTypeConvert() {
                        // 自定义数据库表字段类型转换【可选】
                        @Override
                        public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                            System.out.println("转换类型:" + fieldType);
                            if (fieldType.toLowerCase().contains("tinyint")) {
                                return DbColumnType.INTEGER;
                            }
                            return super.processTypeConvert(globalConfig, fieldType);
                        }
                    });
    
            // 3. 策略配置globalConfiguration中
            StrategyConfig stConfig = new StrategyConfig();
            // 全局大写命名
            stConfig.setCapitalMode(true)
                    // 指定表名 字段名是否使用下划线
                    //.setDbColumnUnderline(true)
                    // 数据库表映射到实体的命名策略
                    .setNaming(NamingStrategy.underline_to_camel)
                    //.setTablePrefix("tbl_")
                    // 生成的表
                    .setInclude(new String[] {
                            "table_teacher","table_student"
                    })
                    .setEntityBooleanColumnRemoveIsPrefix(false)
                    // 自定义实体,公共字段
                    .setTableFillList(tableFillList);
    
            // 4. 包名策略配置
            PackageConfig pkConfig = new PackageConfig();
            pkConfig.setParent("com.company.project.api")
                    //dao
                    .setMapper("repository.mysql.mapper")
                    //servcie
                    .setService("service")
                    //controller
                    .setController("web")
                    .setEntity("repository.mysql.domain")
                    //mapper.xml
                    .setXml("repository.mysql.mybatis");
    
            // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
            InjectionConfig cfg = new InjectionConfig() {
                @Override
                public void initMap() {
                    Map<String, Object> map = new HashMap<>();
                    map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
                    this.setMap(map);
                }
            };
    
            // 自定义输出文件目录
            List<FileOutConfig> focList = new ArrayList<>();
            // 调整xml生成目录演示
            focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    return projectPath + "/src/main/resources/META-INF/mybatis/" + tableInfo.getEntityName() + "Mapper.xml";
                }
            });
            cfg.setFileOutConfigList(focList);
    
    
            // 关闭默认生成,如果设置空 OR Null 将不生成该模块。
            TemplateConfig tc = new TemplateConfig();
            tc.setController(null);
            tc.setXml(null);
    
            // 5. 整合配置
            AutoGenerator ag = new AutoGenerator();
            ag.setGlobalConfig(config)
                    .setDataSource(dsConfig)
                    .setStrategy(stConfig)
                    .setPackageInfo(pkConfig)
                    .setCfg(cfg)
                    .setTemplate(tc);
    
            // 6. 执行
            ag.execute();
        }
    
    
    }
  • 相关阅读:
    一个让echarts中国地图包含省市轮廓的技巧
    安装MySql for Visual Studio的坑
    EasyUI文档学习心得
    《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
    U3D自定义Inspector项未触发保存事件的解决方案
    ANT自动打包U3D安卓项目研究笔记
    HipChat上传文件报未知错误解决方案
    Unity3D读取模型文件自动生成AnimatorController简单实例
    较友好的Web文件下载用户体验实例
    Cocos2dx 3.x包含ext库报错解决
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/11797347.html
Copyright © 2011-2022 走看看