【MybatisPlus】SpringBoot快速集成MybatisPlus

目录

  一、引入依赖
  二、逆向生成工具类
  三、其他配置

 

一、引入依赖

<!-- mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- mybatis-plus 所需依赖  -->
<!-- 注意:不要再引入mybatis依赖 mybatis-spring-boot-starter 了,防止造成版本冲突-->
<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.freemarker</groupId>
   <artifactId>freemarker</artifactId>
   <version>2.3.31</version>
</dependency>



<!-- 实体工具类依赖 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

二、逆向生成工具类

先上代码:

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.Collections;

public class MybatisPlusGeneratorUtil {

    // TODO 注意:未来每次只需要修改TODO部分
    public static void main(String[] args) {

        // 0、数据库配置【数据库连接、用户名、密码】
        String dbUrl = "jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8";
        String userName = "username";
        String password = "password";

        // 1、globalConfig【作者、输出目录】
        String author = "author";
        String outputDir = System.getProperty("user.dir") + "/src/main/java";

        // 2、packageConfig【父包名、父包模块名、实体类PO生成路径、Mapper接口生成路径、Mapper.xml生成路径】
        String parent = "com.myself";
        String moduleName = "testmybatisplus";
        String entityPODir = "entity.po";
        String daoDir = "repository";
        String daoImplDir = "repository.Impl";
        String mapperDir = "mapper";
        String mapperXmlDir = System.getProperty("user.dir") + "/src/main/resources/mapper/";

        // 3、strategyConfig【过滤表前缀、自动填充的字段、表名】
        String[] addTablePrefix = {};
        Column[] addTableFills = {new Column("create_time", FieldFill.INSERT), new Column("update_time", FieldFill.INSERT_UPDATE)};
        // TODO 【每次必须要改】
        String[] addInclude = {"test_mybatis_plus"};

        FastAutoGenerator
            // 数据库配置
            .create(dbUrl, userName, password)
            // 全局配置
            .globalConfig(builder -> {
                builder.author(author)              // 设置作者
                    .fileOverride()                 // 覆盖已生成文件
                    .outputDir(outputDir)           // 指定输出目录
                    .disableOpenDir();              // 不打开输出目录
            })
            // 包配置
            .packageConfig(builder -> {
                builder.parent(parent)                                                         // 设置父包名
                    .moduleName(moduleName)                                                    // 设置父包模块名
                    .entity(entityPODir)                                                       // 实体类PO生成路径
                    .mapper(mapperDir)                                                         // Mapper接口生成路径
                    .service(daoDir)                                                           // 设置自定义dao路径
                    .serviceImpl(daoImplDir)                                                   // 设置自定义daoImpl路径
                    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, mapperXmlDir));   // 设置mapperXml生成路径
            })
            // 策略配置
            .strategyConfig(builder -> {
                builder.addInclude(addInclude)                                    // 设置需要生成的表名,默认为库中所有表
                    .addTablePrefix(addTablePrefix)                               // 设置过滤表前缀
                    .mapperBuilder().enableBaseResultMap()                        // 开启表字段映射、cache()默认不开启
                    .entityBuilder().addTableFills(addTableFills).enableLombok()  // 设置自动填充的时间字段、开启lombok模型
                ;
            })
            // 模板配置
            .templateConfig(builder ->
                builder
                    .controller("")                             // 设置不生成controller
                    .service("")                                // 设置不生成service
                    .serviceImpl("")                            // 设置不生成serviceImpl
                    .entity("/templates/entity.java")       // 设置entity模板
                    .mapper("/templates/mapper.java")       // 设置mapper接口模版
                    .mapperXml("/templates/mapper.xml")     // 设置mapper.xml模板
            )
            // 模板引擎
            .templateEngine(new FreemarkerTemplateEngine())                  // 使用Freemarker引擎模板,默认的是Velocity引擎模板
            // 注入配置
            // .injectionConfig()
            // 执行
            .execute();
    }
}

说明:其实此段逻辑不复杂,就是对【数据源配置、全局配置、包配置、注入配置、模板配置、模板引擎】各项配置进行初始化,各个配置可查看 FastAutoGenerator 类,各项配置对应的具体配置可查看对应的配置类

三、其他配置

1、配置需要扫描的mapper包所在的位置:在启动类上添加一个Mapper扫描的注解MapperScan,该配置也可放到任意一个配置类上,效果相同

2、自动填充create_time和update_time的配置类:

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // start insert fill...
        this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // start update fill...
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }
}

这个配置类是要和实体类上的注解配置使用的。由于已经在自动生成的工具类上做了设置,所以自动生成的实体中,createTime和updateTime上都会有对应注解,这样才能自动填充,如下注解。

@TableField(fill = FieldFill.INSERT)
@TableField(fill
= FieldFill.INSERT_UPDATE)

 3、如果我们想要使用Mybatis-Plus中的分页功能,我们还需要添加一个配置类,加入分页拦截器的配置。

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

@Configuration
public class MybatisPlusConfig {
    // 老版本,目前已失效
    /**@Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        return paginationInterceptor;
    }*/

    // 新的分页插件,一缓和二缓遵循mybatis的规则
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

 

小编不易,如果文章对您有帮助,可否来个三连,赏个赞也是好的呀!!!

 

博客参考:

SpringBoot教程(十三) SpringBoot集成MybatisPlus:https://blog.csdn.net/m0_67402013/article/details/126114741

posted @ 2022-12-30 11:54  细胞何  阅读(460)  评论(0编辑  收藏  举报