首页 > 其他分享 >【MybatisPlus】SpringBoot快速集成MybatisPlus

【MybatisPlus】SpringBoot快速集成MybatisPlus

时间:2022-12-30 12:01:15浏览次数:67  
标签:集成 mapper MybatisPlus SpringBoot 配置 baomidou import com String

目录

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

 

一、引入依赖

<!-- 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.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.ftl")       // 设置entity模板
                    .mapper("/templates/mapper.java.ftl")       // 设置mapper接口模版
                    .mapperXml("/templates/mapper.xml.ftl")     // 设置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

标签:集成,mapper,MybatisPlus,SpringBoot,配置,baomidou,import,com,String
From: https://www.cnblogs.com/hwh000/p/17014547.html

相关文章

  • 手把手的SpringBoot教程,SpringBoot创建web项目(三)
    这节课,我们来学习一下SpringBoot的环境配置,在SpringBoot中,所有的配置都写在application.properties中:我们启动项目,默认端口是8080,我们现在给他配置一个8088:server.port=808......
  • 飞书、钉钉、企业微信消息通知集成双因子认证,接收一次性动态密码
    使用宁盾双因子认证H5令牌的用户每次登录时要切回到企业微信、飞书、钉钉工作台中,找到H5令牌小程序,点进去看动态码。记住或复制动态码后再切回登录界面输入验证。路径合理,但......
  • SpringBoot(九):整合Mybatis
    一、导入依赖<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId>......
  • 0016 常见错误com.example.adminspringboot.mapper.UserMapper.update
    错误截图  在使用mybatis中容易出现解决方法:在配置文件中加上路径书写:mybatis:mapper-locations:classpath:mapper/*.xml#扫描所有mapper下的xml文件 ......
  • springboot项目打包后上传服务器失败,但是在本地可以运行。
    近期开发一个项目,在本地运行无问题,发到服务器上无法访问,最后排查发现,springboot使用的是内嵌的tomcat,而项目要使用外部的tomcat。1.在pom文件里面去掉打包不参与的。<!--......
  • Selenium43-Jenkins持续集成
    软件工程互联网软件的开发、测试和发布,软件工程已经形成了一套标准流程,把工作流程分为以下几个阶段CI/CD介绍持续集成(Continuousintegration,简称CI)持续集成指的......
  • springboot简单了解
    先创建一下springboot工程,可以在idea里面创建,也可以在spring.io的官网里面创建,因为idea很卡,所以我一般用官网里面创建。  勾选起步依赖: 然后在程序中,对于控制器......
  • Java开发学习(四十九)----MyBatisPlus更新语句之乐观锁
    1、概念在讲解乐观锁之前,我们还是先来分析下问题:业务并发现象带来的问题:秒杀假如有100个商品或者票在出售,为了能保证每个商品或者票只能被一个人购买,如何保证不会出......
  • SpringBoot - WebMvcConfigurer 配置类
    WebMvcConfigurer:1.publicvoidconfigurePathMatch(PathMatchConfigurerconfigurer)路径匹配规则一般不用修改2.publicvoidconfigureContentNegotiation(ContentNe......
  • SpringBoot - 内容协商机制
    1.内容协商机制根据客户端接收能力不同,SpringBoot返回不同媒体类型的数据比如:客户端Http请求Accept:application/xml则返回xml数据,客户端Http请求Accept:a......