MybatsiPlus整合SpringBoot配置,自动生成代码

基础配置

官网:https://baomidou.com/pages/24112f/

依赖:

<!--数据库驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>
<!--代码自动生成-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3</version>
</dependency>

说明:最好不要mybatis-plus和mybatis一起导入

配置文件:

spring: 
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mybatis_plus?userSSl=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
    driver-class-name: com.mysql.cj.jdbc.Driver

输出sql日志配置

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

时间类字段

创建时间与更新时间自动生成

数据库生成

将创建时间与更新时间的默认值改为CURRENT_TIMESTAMP

代码生成

在实体类字段上增加注解

@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;

编写处理器

@Slf4j
@Component
public class CusMetaDataHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        Date date = new Date();
        this.setFieldValByName("createTime",date,metaObject);
        log.info("set createTime " + date);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        Date date = new Date();
        this.setFieldValByName("updateTime",date,metaObject);
        log.info("set updateTime " + date);
    }
}

乐观锁

1、在数据库表增加version字段

2、在实体类version字段上增加@Version注解

3、在MybatisPlus配置类中增加Bean

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}

分页查询

在配置类中增加分页插件

使用分页

@Test
public void testPage(){
    Page<UserTest> page = new Page<>(1,2);
    Page<UserTest> userTestPage = userTestMapper.selectPage(page, null);
    for (UserTest record : userTestPage.getRecords()) {
    System.out.println(record);
    }
}

逻辑删除

在数据表中增加delete字段

在实体类增加注解@TableLogic

在配置文件中进行配置

mybatis-plus:
    global-config:
        db-config:
            logic-delete-field: delete # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
            logic-delete-value: 1 # 逻辑已删除值(默认为 1)
            logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

自动注入的sql会加上delete=0的条件,自定义sql不会加

性能分析插件

MP在3.2.0移除了PerformanceInterceptor 相关,建议使用p6spy

增加依赖

<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.9.1</version>
</dependency>

修改数据库连接配置

P6SpyDriver底层是实现与com.mysql.jdbc.Driver类似都是实现java.sql.Driver接口

url: jdbc:p6spy:mysql://localhost:3306/...
driver-class-name: com.p6spy.engine.spy.P6SpyDriver

在resources下增加配置文件

spy.properties

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
# class to use for formatting log messages (default is: com.p6spy.engine.spy.appender.SingleLineFormat)
#logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
logMessageFormat=com.ralph.commons.mybatis.logs.P6spyLogFormatStrategy
# 自带的日志格式 (default is com.p6spy.engine.spy.appender.FileLogger)
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
#appender=com.p6spy.engine.spy.appender.StdoutLogger
#appender=com.p6spy.engine.spy.appender.FileLogger
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 使用日志系统记录sql
appender=com.leimingtech.commons.mybatis.logs.P6SpyLogger
## 配置记录Log例外
excludecategories=info,debug,result,batc,resultset
# 设置使用p6spy driver来做代理
deregisterdrivers=true
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动
driverlist=com.mysql.jdbc.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 秒
outagedetectioninterval=2

如果需要自定义输出日志格式,以及输出的内容,可以自定义配置日志输出内容类,直接继承与MessageFormattingStrategy即可

条件构造器

官网:https://baomidou.com/pages/10c804/#kotlin%E4%BD%BF%E7%94%A8wrapper

示例

QueryWrapper<UserTest> userTestQueryWrapper = new QueryWrapper<>();
userTestQueryWrapper.eq("name","ralph").ge("age",20);
UserTest userTest = userTestMapper.selectOne(userTestQueryWrapper);

自动生成代码

添加依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

写配置类

配置参数地址:https://github.com/baomidou/generator

package com.ralph.springbootredis.config;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
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.Property;

import java.util.Collections;

/**
 * 自动生成代码
 */
public class GeneratorCode {
    public static void main(String[] args) {

        String codePath = "E:\\TemFile\\generator";
        // 构建自动生成代码对象
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus?userSSl=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT",
                        "root", "123456")
                .globalConfig(builder -> {
                    builder.author("ralph") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .outputDir(codePath); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.ralph") // 设置父包名
                            .moduleName("springbootredis") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, codePath)); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("generator_code") // 设置需要生成的表名
                            .addTablePrefix("t_", "c_") // 设置过滤表前缀
                            .entityBuilder().enableLombok() // 使用Lombok
                            .idType(IdType.AUTO) // 设置id策略
                            .addTableFills(new Property("createTime", FieldFill.INSERT),new Property("updateTime",FieldFill.UPDATE)) // 字段填充
                            .enableFileOverride() // 覆盖原有文件
                            .versionColumnName("version") // 乐观锁字段名(数据库)
                            .versionPropertyName("version") // 乐观锁属性名(实体)
                            .logicDeleteColumnName("del_flag") // 逻辑删除字段名(数据库)
                            .logicDeletePropertyName("delFlag"); // 逻辑删除属性名(实体)
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }
}

👍 欢迎前往博客主页查看更多内容

👍 如果觉得不错,期待您的点赞、收藏、评论、关注

👍 ​ 如有错误欢迎指正!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值