• MyBatis-Plus学习笔记(2):代码生成器


    AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码。

    项目结构:

    生成前:

    生成后:

    pom.xml:

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.3.1.tmp</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>3.3.1.tmp</version>
            </dependency>
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.29</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    </dependencies>
    

    代码生成主类:PlusGenerator

    package com.cf.plusdm2;
    
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
    import com.baomidou.mybatisplus.generator.config.GlobalConfig;
    import com.baomidou.mybatisplus.generator.config.PackageConfig;
    import com.baomidou.mybatisplus.generator.config.StrategyConfig;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
    
    public class PlusGenerator {
    
        public static void main(String[] args) {
            //代码生成器
            AutoGenerator mpg = new AutoGenerator();
    
            //全局配置
            GlobalConfig gc = new GlobalConfig();
            String projectPath = System.getProperty("user.dir");
            //生成文件的输出目录
            gc.setOutputDir(projectPath + "/src/main/java");
            //开发人
            gc.setAuthor("布禾");
            //是否打开输出目录
            gc.setOpen(false);
            //是否覆盖已有文件,默认false
            gc.setFileOverride(true);
            //实体属性 Swagger2 注解
            //gc.setSwagger2(true);
            //mapper.xml中生成通用查询结果列
            gc.setBaseColumnList(true);
            //mapper.xml中生成通用查询映射结果
            gc.setBaseResultMap(true);
            //设置Controller、Mapper、mapper.xml等命名方式,使用默认即可。
            /*gc.setServiceName("%sService");
            gc.setControllerName();
            gc.setMapperName();
            gc.setEntityName();
            gc.setXmlName();
            gc.setServiceImplName();*/
            mpg.setGlobalConfig(gc);
    
    
            //数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://localhost/localdb?useUnicode=true&characterEncoding=UTF-8");
            //数据库 schema name
            // dsc.setSchemaName("public");
            //数据库驱动
            dsc.setDriverName("com.mysql.jdbc.Driver");
            //数据库连接用户名
            dsc.setUsername("root");
            //数据库连接密码
            dsc.setPassword("123456");
            mpg.setDataSource(dsc);
    
    
            //包配置
            PackageConfig pc = new PackageConfig();
            //父包模块名
            pc.setModuleName("user");
            //父包名,如果为空,将下面子包名必须写全部, 否则就只需写子包名
            pc.setParent("com.cf.plusdm2");
            //设置Controller、Mapper、mapper.xml等存放的包名
            /*pc.setController();
            pc.setEntity();
            ...*/
            mpg.setPackageInfo(pc);
    
    
            // 策略配置
            StrategyConfig strategy = new StrategyConfig();
            //数据库表映射到实体的命名策略
            strategy.setNaming(NamingStrategy.underline_to_camel);
            //数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);
            //是否为lombok模型,默认false
            strategy.setEntityLombokModel(true);
            //生成 @RestController 控制器
            strategy.setRestControllerStyle(true);
            //需要包含的表名,允许正则表达式
            strategy.setInclude("tb_user");
            //驼峰转连字符
            strategy.setControllerMappingHyphenStyle(true);
            //表前缀
            strategy.setTablePrefix("tb_");
            mpg.setStrategy(strategy);
            mpg.setTemplateEngine(new FreemarkerTemplateEngine());
            mpg.execute();
        }
    }
    
    

    当以上生成不能满足需求时,MyBatis-Plus也提供了自定义生成的方法,如使用InjectionConfig和TemplateConfig。

    自定义生成Controller

    1.首先创建用于生成Controller的FreeMarker模板文件,内容可以参照com.baomidou.mybatis-plus-generator.3.3.1.tmp.mybatis-plus-generator-3.3.1.tmp.jar!.templates.controller.java.ftl(默认Controller的模板文件)模板文件进行修改。
    src/main/resources/ftl/controller.java.ftl:

    package ${package.Controller};
    
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.beans.factory.annotation.Autowired;
    <#if restControllerStyle>
    import org.springframework.web.bind.annotation.RestController;
    <#else>
    import org.springframework.stereotype.Controller;
    </#if>
    <#if superControllerClassPackage??>
    import ${superControllerClassPackage};
    </#if>
    <#if cfg.servicePackage??>
    import ${cfg.servicePackage}.${table.serviceName};
    </#if>
    <#if cfg.entityPackage??>
    import ${cfg.entityPackage}.${table.entityName};
    </#if>
    
    /**
     * <p>
     * ${table.comment!} 前端控制器
     * </p>
     *
     * @author ${author}
     * @since ${date}
     */
    <#if restControllerStyle>
    @RestController
    <#else>
    @Controller
    </#if>
    @RequestMapping("<#if package.ModuleName??>/${package.ModuleName}</#if>/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}</#if>")
    <#if kotlin>
    class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
    <#else>
    <#if superControllerClass??>
    public class ${table.controllerName} extends ${superControllerClass} {
    <#else>
    public class ${table.controllerName} {
    </#if>
         @Autowired
         private ${table.serviceName} ${table.serviceName?uncap_first};
    
         @RequestMapping("/add")
         public String insert(User user){
             return ${table.serviceName?uncap_first}.save(user) ? "success" : "fail";
         }
    }
    </#if>
    
    

    2.在PlusGenerator中策略配置上方添加InjectionConfig和TemplateConfig的配置:

            //自定义配置
            InjectionConfig cfg = new InjectionConfig() {
                @Override
                public void initMap() {
                    // to do nothing
                }
            };
            //传入模板的参数,在模板中通过cfg.servicePackage的方式来获取
            Map<String, Object> map = new HashMap<>();
            map.put("servicePackage", pc.getParent() + "." + pc.getService());
            map.put("entityPackage", pc.getParent() + "." + pc.getEntity());
            cfg.setMap(map);
            mpg.setCfg(cfg);
    
            //配置模板
            TemplateConfig templateConfig = new TemplateConfig();
            templateConfig.setController("/ftl/controller.java");
            mpg.setTemplate(templateConfig);
    

    使用templateConfig.setController()方法来设置生成controller的模板,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别。当未设置值时,则使用默认MyBatis-Plus提供的默认的模板。当设置为null时,则不会生成Controller。(mapper、service等类似)

    重新运行PlusGenerator,生成后的Controller如下:

    package com.cf.plusdm2.user.controller;
    
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RestController;
    import com.cf.plusdm2.user.service.IUserService;
    import com.cf.plusdm2.user.entity.User;
    
    /**
     * <p>
     *  前端控制器
     * </p>
     *
     * @author 布禾
     * @since 2020-02-10
     */
    @RestController
    @RequestMapping("/user/user")
    public class UserController {
         @Autowired
         private IUserService iUserService;
    
         @RequestMapping("/add")
         public String insert(User user){
             return iUserService.save(user) ? "success" : "fail";
         }
    }
    
    

    代码生成器详细使用可参考:代码生成器

  • 相关阅读:
    Bootstrap_警示框
    Bootstrap_标签
    Bootstrap_分页
    Bootstrap_导航条
    Bootstrap_导航
    Bootstrap_按钮工具栏
    Bootstrap_下拉菜单
    Bootstrap_网格系统
    Bootstrap_表单_图标
    统计学习方法 李航---第12章 统计学习方法总结
  • 原文地址:https://www.cnblogs.com/seve/p/12291538.html
Copyright © 2020-2023  润新知