【Springboot】集成Mybatis-plus代码生成器

179 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

前言:

在使用Mybatisplus之前一直使用的是通用mapper,其中代码生成使用的是mybatis自己的工具类Mybatis Generator,这个生成工具有比较大的局限性,只能生成实体类和mapper文件,像是controller和service这种代码的就无法生成。

而mybatisplus可以针对性的进行生成代码文件,通过配置可以将controller、service、mysql、entity等代码都可以生成,而且可以配置生成路径和文件名,这样一来开发效率就大大提高,尤其是开发一些管理系统的时候。

实现:

一、引入maven坐标

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

二、创建mybatisplus的配置类

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * mybatisplus的配置类
 *
 */
@Configuration
@MapperScan("com.code.sys.mapper")
public class MybatisPlusConfig {

   // 最新版
   @Bean
   public MybatisPlusInterceptor mybatisPlusInterceptor() {
      MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
      return interceptor;
   }
}

三、创建代码生成器Test测试类

在配置类中可以指定输出目录,生成代码的包名,还可以使用生成代码的模板,如果有特殊需要可以直接自定义代码生成模板,放在resources目录下,在配置类中指定模板位置,这样在生成代码时就会按照自定义模板的代码内容来生成了。

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Collections;

@SpringBootTest
class ErpApplicationTests {

   @Test
   void codeGenerator() {
      FastAutoGenerator.create("jdbc:mysql://localhost:3306/springboot_db?serverTimezone=GMT%2b8", "root", "root")
            // 全局配置
            .globalConfig(builder -> {
               builder.fileOverride() // 覆盖已生成文件
                     .disableOpenDir()// 禁止打开输出目录
                     .outputDir("E:\\BS_OT\\bookSystem\\src\\main\\java\\"); // 指定输出目录
            })
            // 包配置
            .packageConfig(builder -> {
               builder.parent("com.code.bus") // 设置父包名
                     .moduleName(null) // 设置父包模块名
                     .entity("domain")
                     .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "E:\\BS_OT\\bookSystem\\src\\main\\resources\\mapper\\")); // 设置mapperXml生成路径
            })
            // 策略配置
            .strategyConfig(builder -> {
//                    builder.entityBuilder()
//                    builder.mapperBuilder().enableMapperAnnotation().build();
               builder.controllerBuilder().enableHyphenStyle()  // 开启驼峰转连字符
                     .enableRestStyle();  // 开启生成@RestController 控制器
               builder.addInclude("sys_activity") // 设置需要生成的表名
                     .addTablePrefix("t_", "sys_"); // 设置过滤表前缀

               builder.serviceBuilder().formatServiceFileName("%sService"); //去掉Service接口的首字母I
            })
//                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
            .execute();
   }
}