zoukankan      html  css  js  c++  java
  • 代码生成器

    代码生成器

    添加依赖

    • 添加代码生成器依赖
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.2.0</version>
    </dependency>
    
    • 添加模板引擎依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。

      Velocity(默认)

    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.1</version>
    </dependency>
    

    ​ Freemarker

    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.29</version>
    </dependency>
    

    ​ Beetl

    <dependency>
        <groupId>com.ibeetl</groupId>
        <artifactId>beetl</artifactId>
        <version>3.0.13.RELEASE</version>
    </dependency>
    

    ​ 注意!如果您选择了非默认引擎,需要在 AutoGenerator 中 设置模板引擎。

    AutoGenerator generator = new AutoGenerator();
    
    // set freemarker engine
    generator.setTemplateEngine(new FreemarkerTemplateEngine());
    
    // set beetl engine
    generator.setTemplateEngine(new BeetlTemplateEngine());
    
    // set custom engine (reference class is your custom engine class)
    generator.setTemplateEngine(new CustomTemplateEngine());
    
    // other config
    ...
    

    程序编写

    public  enum CodeGenerator {
        INSTANCE;
    
        /**
         * 代码生成器入口方法
         */
        public static void main(String[] args) {
            System.out.print("请输入需要生成实体对象的表名:");
            Scanner scanner = new Scanner(System.in);
            String tableName = scanner.nextLine();
            AutoGenerator mpg = INSTANCE.getAutoGenerator(tableName);//配置代码生成器
            mpg.execute();//生成代码
            System.err.println(" TableName【 " + tableName + " 】Generate Success !");
        }
    
    
    
        /**
         * 获取AutoGenerator
         */
        private AutoGenerator getAutoGenerator(String tableName) {
            return new AutoGenerator()
                    // 全局配置
                    .setGlobalConfig(getGlobalConfig())
                    // 数据源配置
                    .setDataSource(getDataSourceConfig())
                    // 策略配置
                    .setStrategy(getStrategyConfig(tableName))
                    // 包配置
                    .setPackageInfo(getPackageConfig())
                    // 注入自定义配置,可以在 VM 中使用 ${cfg.abc} 获取属性
                    .setCfg(getInjectionConfig())
                    //自定义模板
                    .setTemplate(getTemplateConfig());
        }
    
    
        /**
         * 获取GlobalConfig,配置全局变量
         */
        private GlobalConfig getGlobalConfig() {
            return new GlobalConfig()
                    .setOutputDir(System.getProperty("user.dir") + "/src/main/java")// 输出目录
                    .setFileOverride(true)// 是否覆盖文件
                    .setActiveRecord(false)// 开启 activeRecord 模式(java不支持这种模式)
                    .setEnableCache(false)// XML 二级缓存
                    .setBaseResultMap(false)// XML ResultMap
                    .setBaseColumnList(false)// XML ColumnList
                    .setKotlin(false)// 是否生成 kotlin 代码
                    .setOpen(false)
                    .setAuthor("")// 作者
                    // 自定义文件命名, 注意 %s 会自动填充表实体属性
                    .setEntityName("%s")
                    .setMapperName("%sMapper")
                    .setXmlName("%sMapper")
                    .setServiceName("I%sService")
                    .setServiceImplName("%sServiceImpl")
                    .setControllerName("%sController")
                     .setSwagger2(true);//实体属性 Swagger2 注解
        }
    
    
    
        /**
         * 获取TableFill策略
         */
        private List<TableFill> getTableFills() {
            // 自定义需要填充的字段
            List<TableFill> tableFillList = new ArrayList<>();
            tableFillList.add(new TableFill("create_time", FieldFill.INSERT));
            tableFillList.add(new TableFill("update_time", FieldFill.INSERT_UPDATE));
            tableFillList.add(new TableFill("create_uid", FieldFill.INSERT));
            tableFillList.add(new TableFill("update_uid", FieldFill.INSERT_UPDATE));
            return tableFillList;
        }
    
        /**
         * 获取DataSourceConfig,数据源配置
         */
        private DataSourceConfig getDataSourceConfig() {
            return new DataSourceConfig()
                    .setDbType(DbType.DB2)// 数据库类型
                    .setTypeConvert(new DB2TypeConvert() {
                        //自定义转换器,可以转换一些特殊类型,这应该是db2特有的
                        @Override
                        public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                            if (fieldType.toLowerCase().equals("bit")) {
                                return DbColumnType.BOOLEAN;
                            }
                            if (fieldType.toLowerCase().equals("tinyint")) {
                                return DbColumnType.INTEGER;
                            }
                            if (fieldType.toLowerCase().equals("date")) {
                                return DbColumnType.DATE;
                            }
                            if (fieldType.toLowerCase().equals("time")) {
                                return DbColumnType.DATE;
                            }
                            if (fieldType.toLowerCase().equals("datetime")) {
                                return DbColumnType.DATE;
                            }
                            return super.processTypeConvert(globalConfig, fieldType);
                        }
                    })
                    .setDriverName("com.ibm.db2.jcc.DB2Driver")
                    .setUsername("db2inst1")
                    .setPassword("XFjubao")
                    .setUrl("jdbc:db2://192.168.1.203:50000/PZDB");
        }
    
        /**
         * 获取StrategyConfig,策略配置
         */
        private StrategyConfig getStrategyConfig(String tableName) {
            List<TableFill> tableFillList = getTableFills();
            return new StrategyConfig()
                    .setCapitalMode(false)// 全局大写命名
                    .setTablePrefix("pz_")// 去除前缀
                    .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
                    // .setInclude(new String[] { "user" }) // 需要生成的表
                    // 自定义实体父类
                    .setSuperEntityClass("com.sinosoft.pz.framework.model.entity.BaseEntity")
                    // 自定义实体, 公共字段
                    .setSuperEntityColumns("id")
                    .setTableFillList(tableFillList)
                    // 自定义 mapper 父类
                    .setSuperMapperClass("com.baomidou.mybatisplus.core.mapper.BaseMapper")
                    // 自定义 controller 父类
                    // .setSuperControllerClass("xx.xx.SuperController")
                    // 自定义 service 实现类父类
                    .setSuperServiceImplClass("com.baomidou.mybatisplus.extension.service.impl.ServiceImpl")
                    // 自定义 service 接口父类
                    .setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService")
                    // 【实体】是否生成字段常量(默认 false)
                    .setEntityColumnConstant(true)
                    // 【实体】是否为构建者模型(默认 false)
                    .setEntityBuilderModel(false)
                    // 【实体】是否为lombok模型(默认 false)
                    .setEntityLombokModel(true)
                    // Boolean类型字段是否移除is前缀处理
                    .setEntityBooleanColumnRemoveIsPrefix(true)
                    //是否添加@restController注释(controller)
                    .setRestControllerStyle(true)
                    //添加表名表名
                    .setInclude(tableName);
        }
    
        /**
         * 获取PackageConfig, 包配置
         */
        private PackageConfig getPackageConfig() {
            return new PackageConfig()
                    .setParent("com.sinosoft.pz.system")
                    .setController("web.controller")
                    .setEntity("model.entity")
                    .setMapper("mapper")
                    .setService("service")
                    .setServiceImpl("service.impl");
        }
    
    
    
        /**
         * 获取InjectionConfig,自定义配置
         */
        private InjectionConfig getInjectionConfig() {
            return new InjectionConfig() {
                @Override
                public void initMap() {
                    Map<String, Object> map = new HashMap<>();
                    //map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");自定义作者名称,在模板中用${abc}获取
                    this.setMap(map);
                }
            }.setFileOutConfigList(Collections.singletonList(new FileOutConfig("/templates/mapper.xml.vm") {
                // 自定义输出文件目录,因为mapper.xml和其他的文件不放到同一个目录下,所以需要自定义配置
                @Override
                public String outputFile(TableInfo tableInfo) {
                    String resourcePath = getRootPath() + "/src/main/resources";
                    System.err.println(" Generator Resource Path:【 " + resourcePath + " 】");
                    return resourcePath + "/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
                }
            }));
        }
    
        /**
         * 获取TemplateConfig,自定义模板
         */
        private TemplateConfig getTemplateConfig() {
            //没有自定义的模板
            return new TemplateConfig().setXml(null);
        }
    
        /**
         * 获取项目根目录
         */
        private String getRootPath() {
            return System.getProperty("user.dir");//获取当前项目
        }
    }
    

    Velocity模板

    待续
    
  • 相关阅读:
    『华为』[行业要闻]华为,我们的光环还能顶多久(转)
    总结几点Quartz的经验
    LVS
    postfix邮件服务器安全
    让IE浏览器支持RGBA颜色
    PostgreSQL在何处处理 sql查询之六十四
    PostgreSQL在何处处理 sql查询之六十三
    PostgreSQL在何处处理 sql查询之六十五
    对PostgreSQL的prepared statement 的理解
    PostgreSQL在何处处理 sql查询之六十六
  • 原文地址:https://www.cnblogs.com/haocang/p/11741812.html
Copyright © 2011-2022 走看看