SpringBoot - MyBatis代码生成器(基于MyBatis-Plus插件)

原创
2020/08/20 15:11
阅读数 6.1K

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

 

一、在pom文件中,引入依赖包和插件。

<!-- 数据库驱动依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 代码生成器依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.3.1.tmp</version>
</dependency>
<!-- 模板引擎依赖 -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.2</version>
</dependency>

 

二、在application.properties配置数据库信息。

####  数据库配置  ####
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.url = jdbc:mysql://localhost:3306/demoDB?useUnicode=swater&characterEncoding=UTF-8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name = com.mysql.jdbc.Driver

 

三、配置Mybatis-Plus信息,开始生产代码。

1.编写代码生成器的请求控制器。

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.api.R;
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.piao.sys.sysconfig.dto.GeneratorCode;
import com.power.common.util.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * 代码生成器控制器
 */
@RestController
@RequestMapping("/generator")
@Api(value = "generatorcodecontroller", tags = "代码生成器")
public class GeneratorCodeController {

    @PostMapping(value = "/code")
    @ApiOperation(value = "代码生成", notes = "代码生成")
    public R generatorCode(@Valid @RequestBody GeneratorCode code){
        String author = StringUtil.isEmpty(code.getAuthor()) ? "piao" : code.getAuthor();

        //1、全局配置
        GlobalConfig config = new GlobalConfig();
        //得到当前项目的路径
        String projectPath = System.getProperty("user.dir");
        config.setActiveRecord(true)//开启AR模式
                .setAuthor(author)//设置作者
                .setOutputDir(projectPath + "/src/main/java")//生成路径(一般在此项目的src/main/java下)
                .setFileOverride(true)//第二次生成会把第一次生成的覆盖掉
                .setOpen(false)//生成完毕后是否自动打开输出目录
                .setSwagger2(true)//实体属性 Swagger2 注解
                .setIdType(IdType.AUTO)//主键策略
                .setFileOverride(false)//文件覆盖
                .setServiceName("%sService")//生成的service接口名字首字母是否为I,这样设置就没有I
                .setBaseResultMap(false)//生成resultMap
                .setBaseColumnList(false);//在xml中生成基础列

        //2、数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)//数据库类型
                .setDriverName("com.mysql.jdbc.Driver")
                .setUrl("jdbc:mysql://localhost:3306/demoDB?useUnicode=true&useSSL=false&characterEncoding=utf8")
                .setUsername("root")
                .setPassword("root");

        //3、策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true)//开启全局大写命名
                .setNaming(NamingStrategy.underline_to_camel)//表名映射到实体的命名策略(下划线到驼峰)
                //表字段映射属性名策略(未指定按naming)
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setTablePrefix("t_")//表名前缀
                //.setSuperEntityClass("你自己的父类实体,没有就不用设置!")
                //.setSuperEntityColumns("id");//写于父类中的公共字段
                //.setSuperControllerClass("自定义继承的Controller类全称,带包名,没有就不用设置!")
                .setRestControllerStyle(true) //生成 @RestController 控制器
                .setEntityLombokModel(true)//使用lombok
                .setInclude(code.getTableName());//逆向工程使用的表

        //4、包名策略配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.piao.generator")//设置包名的parent
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("entity")
                .setXml("mapper");//设置xml文件的目录

        //5、整合配置
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);

        //6、执行
        autoGenerator.execute();

        return R.ok(null);
    }

}

2.编写代码生成器的入参

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;

@Data
@ApiModel(value = "generatorcode", description = "代码生成")
public class GeneratorCode {

    @ApiModelProperty(value = "作者")
    private String author;

    @ApiModelProperty(value = "表名称。支持多个表名拼接,如:t_user_info,t_log", required = true)
    @NotBlank(message = "模块名称不能为空")
    private String tableName;

}

 

3.请求代码生成器

我这里使用的是swagger文档调式生成的,也可以使用postman或者其他网络工具请求。

代码执行成功后,便会自动生成 entity、mapper 接口、mapper 的 xml 文件、service、serviceImpl、controller代码:

 

温馨提示:这里我们是把代码生成器封装成了一个接口,然后通过swagger在线文档来生成不同模块的代码。我们还建议可以写在单元测试类里面,然后通过修改StrategyConfig.setInclude("表名")来生成代码,团队使用起来也很方便。

 

 

更多阅读

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部