当前位置:   article > 正文

mybatis-plus--配置-(sql)日志输出-自动填充-分页-多数据源-逻辑删除-配置加密_mybatis-plus sql日志

mybatis-plus sql日志
写在前面:
本文主要介绍mybatis-plus的配置,以后在有的时候在补充。欢迎交流。

日志输出

调试的时候需要看执行的sql,这时候就很需要日志来记录查看了。

mybatis-plus的日志配置在yml里面

mybatis-plus:
  configuration:
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl    
    # 这个配置会将执行的sql打印到日志文件
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出到日志文件的时候需要配合着logging配置

logging:
  config: classpath:config/logback-spring.xml
  level:
    com:
      example:
        mapper: debug
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

自动填充

自动填充bean

    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
        return globalConfig;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里有2种写法,注释掉的是低版本的。高版本从3.3.0开始可以使用。不过3.3.0不要使用。有bug。
在这里插入图片描述

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    /**
     * 新增填充创建时间
     *
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
//        this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
//        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
        this.fillStrategy(metaObject,"createTime",LocalDateTime.now());
        this.fillStrategy(metaObject,"updateTime",LocalDateTime.now());
    }

    /**
     * 更新填充更新时间
     *
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
//        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
        this.fillStrategy(metaObject,"updateTime",LocalDateTime.now());
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

那么如何设置哪些进行自动填充呢
在实体类上

 @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

  • 1
  • 2
  • 3
  • 4
  • 5

枚举类型,不过也可以直接不写这个属性。

  • DEFAULT:默认不处理

  • INSERT:插入时自动填充字段

  • UPDATE:更新时自动填充字

  • INSERT_UPDATE:插入和更新时自动填充字段

分页

插件bean

@Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

        return interceptor;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

全局字段配置

mybatis-plus:
  global-config:
    db-config:
      # 主键ID类型
      id-type: none
      # 逻辑删除字段名称
      logic-delete-field: deleted
      # 逻辑删除-删除值
      logic-delete-value: 1
      # 逻辑删除-未删除值
      logic-not-delete-value: 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

多数据源

官方文档
依赖

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

boot3需要

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
  <version>${version}</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
spring:
  datasource:
    dynamic:
      primary: db1 # 配置默认数据库
      datasource:
        db1: # 数据源1配置
          url: 
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
        db2: # 数据源2配置
          url: 
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
      durid:
        initial-size: 1
        max-active: 20
        min-idle: 1
        max-wait: 60000
  autoconfigure:
    exclude:  com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

service/mapper层加注解@DS
@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
注解在 service 实现或 mapper 接口方法上,不要同时在 service 和 mapper 注解。

@DS("db2") 
public interface Mapper extends BaseMapper<User> {
}

@Service
@DS("db2")
public class ServiceImpl extends ServiceImpl<ModelMapper, Model> implements IModelService {}
  @DS("db2")
  List<User> selectAll();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

配置加密

在yml配置文件上存在着很多不希望被别人看到的配置,如mysql账号和密码,阿里云密钥等。
如果不加密,可以直接加压jar包就可以看到里面的密码了。

MyBatis-Plus 中自带的 AES 加密功能

我们顺便在一个测试内进行生成就可以了。
首先生成密钥

String key = AES.generateRandomKey();
  • 1

生成密文

        String key = AES.generateRandomKey();
        System.out.println("密钥= "+key);
        System.out.println("root账号 = " + AES.encrypt("root", key));
        System.out.println("mysql密码 = " + AES.encrypt("123456", key));
  • 1
  • 2
  • 3
  • 4

结果
在这里插入图片描述
把这个直接复制到yml,加上前缀mpw:就可以了
在这里插入图片描述
现在不给密钥进行单元测试查询操作,失败。
在这里插入图片描述
在test加上参数–mpw.key=密钥
在这里插入图片描述
测试通过
在这里插入图片描述
如果是idea启动就直接在配置加上

在这里插入图片描述
在这里插入图片描述
如果是命令行就直接在命令行后面加

java -jar xxx.jar --mpw.key=asdasdasd
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/599868
推荐阅读
相关标签
  

闽ICP备14008679号