SpringBoot | 使用 MyBatisPlus 代码生成器


SpringBoot 项目自存

参考资料:



步骤 1:引入相关依赖

① 在项目的 pom.xml 文件中引入 MyBatisPlus 的依赖:

<!--    mybatis-plus    -->
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.5.1</version>
 </dependency>
 <!--    mybatis-plus代码生成器    -->
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-generator</artifactId>
     <version>3.5.1</version>
 </dependency>
 <!--    velocity代码生成模板    -->
 <dependency>
     <groupId>org.apache.velocity</groupId>
     <artifactId>velocity-engine-core</artifactId>
     <version>2.3</version>
 </dependency>

说明:因为在 MyBatisPlus 的官方指南中指出,默认使用 velocity 作为代码生成模板,所以需要引入对应的依赖,否则运行时报错。

② 在项目的 pom.xml 文件中引入 Swagger 的依赖:

<!--    swagger    -->
 <dependency>
     <groupId>io.springfox</groupId>
     <artifactId>springfox-swagger2</artifactId>
     <version>2.7.0</version>
 </dependency>
 <dependency>
     <groupId>io.springfox</groupId>
     <artifactId>springfox-swagger-ui</artifactId>
     <version>2.7.0</version>
 </dependency>

说明:由于代码生成器所生成的 Controller 会用到 Swagger 提供的注解,因此需要引入对应的依赖,否则在 idea 中注解会爆红。



步骤 2:编写 CodeGenerator 类

util 目录下新建 CodeGenerator.java,并填入以下代码:

  • 请根据自己的实际情况修改数据库信息、输出目录、生成路径等
  • “system_users” 表示待处理的表,名称要与数据库中的一致
  • “system_” 表示代码生成时去除该前缀
public class CodeGenerator {
    
    

    public static void main(String[] args) {
    
    
        FastAutoGenerator.create(
                "jdbc:mysql://localhost:3306/XXX?serverTimezone=GMT%2b8",
                "root",
                "123456")
                .globalConfig(builder -> {
    
    
                    builder.author("XXX") // 设置作者
                            .enableSwagger() // 开启swagger模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("D:/XXX/src/main/java/"); // 指定输出目录
                })
                .packageConfig(builder ->
                        builder.parent("com.XXX.XXX") // 设置父包名
                                .moduleName(null) // 设置父包模块名
                                .pathInfo(Collections.singletonMap(OutputFile.mapperXml,
                                        "D:/XXX/src/main/resources/mapper/")) // 设置mapperXml生成路径
                )
                .strategyConfig(builder -> {
    
    
                    builder.entityBuilder().enableLombok();
                    builder.mapperBuilder().enableMapperAnnotation().build();
                    builder.controllerBuilder().enableHyphenStyle() // 开启驼峰转连字符
                            .enableRestStyle(); // 开启生成@RestController控制器
                    builder.addInclude("system_users", "system_user_role") // 设置需要生成的表名
                            .addTablePrefix("system_", "infra_"); // 设置过滤表前缀
                })
                // .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }
}


步骤 3:编写 Controller 模板

templates 目录下新建 controller.java.vm,并填入以下代码:

  • 可以根据自己的需求进行修改
package ${package.Controller};

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import $!{package.Service}.${table.serviceName};
import ${package.Entity}.${entity};

import org.springframework.web.bind.annotation.RequestMapping;

#if(${restControllerStyle})
import org.springframework.web.bind.annotation.RestController;
#else
import org.springframework.stereotype.Controller;
#end
#if(${superControllerClassPackage})
import ${superControllerClassPackage};
#end

/**
 * <p>
 * $!{table.comment} 前端控制器
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
#if(${restControllerStyle})
@RestController
#else
@Controller
#end
@RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end")
#if(${kotlin})
class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end

#else
#if(${superControllerClass})
public class ${table.controllerName} extends ${superControllerClass} {
#else
public class ${table.controllerName} {
#end

    @Resource
    private ${table.serviceName} ${table.entityPath}Service;

    @PostMapping
    public Boolean save(@RequestBody ${entity} ${table.entityPath}) {
        return ${table.entityPath}Service.saveOrUpdate(${table.entityPath});
    }

    @DeleteMapping("/{id}")
    public Boolean delete(@PathVariable Integer id) {
        return ${table.entityPath}Service.removeById(id);
    }

    @PostMapping("/del/batch")
    public Boolean deleteBatch(@RequestBody List<Integer> ids) {
        return ${table.entityPath}Service.removeByIds(ids);
    }

    @GetMapping
    public List<${entity}> findAll() {
        return ${table.entityPath}Service.list();
    }

    @GetMapping("/{id}")
    public ${entity} findOne(@PathVariable Integer id) {
        return ${table.entityPath}Service.getById(id);
    }

    @GetMapping("/page")
    public Page<${entity}> findPage(@RequestParam Integer pageNum,
                                    @RequestParam Integer pageSize) {
        QueryWrapper<${entity}> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("id");
        return ${table.entityPath}Service.page(new Page<>(pageNum, pageSize), queryWrapper);
    }
}

#end


步骤 4:运行 CodeGenerator 类

运行结果如下图所示:

在这里插入图片描述

注意:因为我们在 CodeGenerator 类中配置了 .fileOverride(),所以每次生成会覆盖之前的内容。



猜你喜欢

转载自blog.csdn.net/m0_64140451/article/details/143523903