美文网首页
SpringBoot之【mybatisplus】代码生成器

SpringBoot之【mybatisplus】代码生成器

作者: MR_jw | 来源:发表于2019-12-18 18:32 被阅读0次

    1、概述、


    AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

    2、使用教程


    2.1 相关依赖

    MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,,可以采用自定义模板引擎。

            <!--代码生成器 依赖-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>3.3.0</version>
            </dependency>
            <!--模板引擎 依赖-->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.28</version>
            </dependency>
    

    2.2 编写配置

    2.2.1 下载模板文件

    模板地址:https://github.com/baomidou/mybatis-plus/tree/3.0/mybatis-plus-generator/src/main/resources/templates
    下载方法:一个下载github文件夹的网站,作者来自孟加拉国

    解压文件到resource目录下
    
    2.2.2 代码生成类编写
     /**
         * <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.isNotEmpty(ipt)) {
                    return ipt;
                }
            }
            throw new MybatisPlusException("请输入正确的" + tip + "!");
        }
    
        public static void main(String[] args) {
            // 代码生成器
            AutoGenerator mpg = new AutoGenerator();
    
            // 全局配置
            GlobalConfig gc = new GlobalConfig();
            final String projectPath = System.getProperty("user.dir");
            gc.setOutputDir(projectPath + "/mybatisplusdemo/src/main/java");
            gc.setAuthor("jobob");
            gc.setOpen(false);
            gc.setIdType(IdType.AUTO);
            // gc.setSwagger2(true); 实体属性 Swagger2 注解
            gc.setFileOverride(true); //设置是否覆盖原来的代码  最好设置为false  或者 另外配置路径
            mpg.setGlobalConfig(gc);
    
    
            // 数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
            // dsc.setSchemaName("public");
            dsc.setDriverName("com.mysql.jdbc.Driver");
            dsc.setUsername("root");
            dsc.setPassword("root");
    
            mpg.setDataSource(dsc);
    
            // 包配置
            final PackageConfig pc = new PackageConfig();
            //pc.setModuleName(scanner("模块名"));
            pc.setParent("com.example.mybatisplusdemo");
            mpg.setPackageInfo(pc);
    
            // 自定义配置
            InjectionConfig cfg = new InjectionConfig() {
                @Override
                public void initMap() {
                    // to do nothing
                }
            };
    
            // 如果模板引擎是 freemarker
            String templatePath = "/templates/mapper.xml.ftl";
            // 如果模板引擎是 velocity
            // String templatePath = "/templates/mapper.xml.vm";
    
            // 自定义输出配置
            List<FileOutConfig> focList = new ArrayList<>();
            // 自定义配置会被优先输出
            focList.add(new FileOutConfig(templatePath) {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                    return projectPath + "/mybatisplusdemo/src/main/resources/mapper/"
                             + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
                }
            });
            /*
            cfg.setFileCreate(new IFileCreate() {
                @Override
                public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                    // 判断自定义文件夹是否需要创建
                    checkDir("调用默认方法创建的目录");
                    return false;
                }
            });
            */
            cfg.setFileOutConfigList(focList);
            mpg.setCfg(cfg);
    
            // 配置模板
            //TemplateConfig templateConfig = new TemplateConfig();
    
            // 配置自定义输出模板
            //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
            // templateConfig.setEntity("templates/entity2.java");
            // templateConfig.setService();
            // templateConfig.setController();
    
            //templateConfig.setXml("templates/mapper.java");
            //mpg.setTemplate(templateConfig);
    
            // 策略配置
    
            StrategyConfig strategy = new StrategyConfig();
            // 表名生成策略(下划线转驼峰命名)
            strategy.setNaming(NamingStrategy.underline_to_camel);
            // 列名生成策略(下划线转驼峰命名)
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);
            // 自定义实体父类
            //strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");
            // 是否启动Lombok配置
            strategy.setEntityLombokModel(true);
            // 是否启动REST风格配置
            strategy.setRestControllerStyle(true);
            strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
            // 写于父类中的公共字段   父类没有id就注释掉,否则实体类不生成 id属性
            //strategy.setSuperEntityColumns("id");
            strategy.setControllerMappingHyphenStyle(true);
            strategy.setTablePrefix(pc.getModuleName() + "_");
            mpg.setStrategy(strategy);
            mpg.setTemplateEngine(new FreemarkerTemplateEngine());
            mpg.execute();
        }
    
    2.2.3 代码生成类启动
    在这里插入图片描述

    目录结构


    在这里插入图片描述

    相关文章

      网友评论

          本文标题:SpringBoot之【mybatisplus】代码生成器

          本文链接:https://www.haomeiwen.com/subject/jngunctx.html