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

2023-10-27

写在前面:
本文主要介绍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

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

logging:
  config: classpath:config/logback-spring.xml
  level:
    com:
      example:
        mapper: debug

自动填充

自动填充bean

    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
        return globalConfig;
    }

这里有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());
    }

}

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

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

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

  • DEFAULT:默认不处理

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

  • UPDATE:更新时自动填充字

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

分页

插件bean

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

        return interceptor;
    }

全局字段配置

mybatis-plus:
  global-config:
    db-config:
      # 主键ID类型
      id-type: none
      # 逻辑删除字段名称
      logic-delete-field: deleted
      # 逻辑删除-删除值
      logic-delete-value: 1
      # 逻辑删除-未删除值
      logic-not-delete-value: 0

多数据源

官方文档
依赖

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version>
</dependency>

boot3需要

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
  <version>${version}</version>
</dependency>
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配置

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();

配置加密

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

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

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

String key = AES.generateRandomKey();

生成密文

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

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

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

java -jar xxx.jar --mpw.key=asdasdasd
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 在自定义条件下清理 SQL

    我需要创建一个简单的搜索 但我无法使用 Sphinx 这是我写的 keywords input split s queries keywords each do keyword queries lt lt sanitize sql for
  • 帮助将二进制图像数据从 SQL Server 读取到 PHP 中

    我似乎无法找到将二进制数据从 SQL 服务器读取到 PHP 的方法 我正在开发一个项目 需要能够将图像直接存储在 SQL 表中 而不是文件系统上 目前 我一直在使用这样的查询 插入 myTable 文档 选择 从 OPENROWSET BU
  • 为什么我的查询在参数化后会中断?

    我有 2 张桌子 Sales and Product Sales可以将产品存储为Idn or Name 传统设计 和Type列指定实际type与之相关 Product等是连接的子集表into这个表来获取真实的数据 在这个例子中 Produc
  • 分组依据检索 3 个值

    我有以下查询 SELECT Cod MIN Id AS id Min MAX Id AS id Max retrieve value in the middle COUNT AS Tot FROM Table a NOLOCK GROUP
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • 从 CTE 插入

    WITH DTL AS SELECT CMPI CODE CMN CDTY MTRL CMI WT FACTOR CMI CNTRCT RATE PL PRESENT PRICE TRM CODE ROUND NVL PRESENT PRI
  • 如何在 SQL 中进行广度优先搜索?

    给定一棵存储为关系的树 Parent Child 1 2 1 3 3 4 3 5 2 6 7 8 7 9 如何获取给定节点的所有后代 例如 对于 1
  • ADO.NET 池连接无法重用

    我正在开发一个 ASP NET MVC 应用程序 该应用程序使用 EF 6 x 来处理我的 Azure SDL 数据库 最近 随着负载的增加 应用程序开始进入无法再与 SQL 服务器通信的状态 我可以看到有 100 个到我的数据库的活动连接
  • MyBatis 枚举的使用

    我知道以前有人问过这个问题 但我无法根据迄今为止找到的信息实施解决方案 所以也许有人可以向我解释一下 我有一个表 状态 它有两列 id 和 name id是PK 我不想使用 POJO Status 而是使用枚举 我创建了这样一个枚举 如下所
  • 日常 MySQL(部分和过滤)复制的最佳实践?

    我有一个相当大的数据库 有超过 40 个表 我只需要复制几个表 5 并且每个表也被过滤 我正在寻找一些复制这些数据的最佳实践 每天就足够了 我可以只选择几个表并为每个表包含一些 WHERE 子句 我正在考虑为每个表启动 mysqldump
  • SQL查询获取最后两条记录的DateDiff

    我有一个名为 Event 的表 其中 eventNum 作为主键 日期作为 SQL Server 2008 R2 中的 datetime2 7 我试图获取表中最后两行的日期并以分钟为单位获取差异 这就是我目前所拥有的 Select DATE
  • 在bigquery中比较两个表的有效方法

    我有兴趣比较两个表是否包含相同的数据 我可以这样做 standardSQL SELECT key1 key2 FROM SELECT table1 key1 table1 key2 table1 column1 table2 column1
  • 了解涉及 3 个或更多表时 JOIN 的工作原理。 [SQL]

    我想知道是否有人可以帮助我提高对 SQL 中 JOIN 的理解 如果它对问题很重要 我会特别考虑 MS SQL Server 取 3 个表 A B A 通过某些 A AId 与 B 相关 和 C B 通过某些 B BId 与 C 相关 如果
  • 使用显式值进行 BigQuery 合并

    据我所知 BigQuery 支持合并两个表 目前 INSERT操作允许将显式值插入表中 例如 INSERT dataset Inventory product quantity VALUES top load washer 10 front
  • 尚未为此带有 SQL Server 的 DbContext .NET Core 配置数据库提供程序

    我一直用这个把头撞在墙上 并且一直在谷歌上搜索无济于事 我刚刚开始一个新的 ASP NET Core MVC 项目 我已将这两个包安装 更新为 2 2 0 Microsoft EntityFrameworkCore SqlServer Mi
  • 如何将此本机 SQL 查询转换为 HQL

    所以我有这个很长的复杂的 Native SQLQuery string hql SELECT FROM SELECT a rownum r FROM select f2 filmid f2 realisateurid f2 titre f2
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何限制两个表之间一对多关系中的多个数量?

    我有一个带有两个 MySql 表的 MySQL 数据库 第一个是第一个表 表 A 有一列具有唯一值 从值 从 1 到 n 在第二个表 2 表 B 中 我有两列 在第一个表中我有一个名称 在第二个我的值从 1 到 n 如果我在 中添加一个值
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • Postgresql:SERIAL 在约束 INSERT 失败时递增

    有一个像这样的简单表结构 CREATE TABLE test id INT PRIMARY KEY sid SERIAL 我注意到如果我尝试插入一行但它未通过约束测试 即主键约束 SERIAL计数器无论如何都会增加 所以下一次成功插入 si

随机推荐

  • echarts设置tooltip的宽高问题

    ECharts容器 1 ECharts容器设置宽度width 值可以是百分比或者是像素 当设置为百分比时 要检查父元素是否设置了宽度 注意 容器宽度设置不要用min width 不然会发现tooltip的宽度等于min width设置的宽度
  • flutter 微信支付 跳转小程序 分享到小程序

    flutter 微信支付 跳转小程序 分享到小程序 直接上步骤 第一步 pubspec yaml 添加依赖 fluwx 1 2 1 1 fluwx最新3 0不太好用 第二步 界面添加 import package fluwx fluwx d
  • MMDetection3D/3D目标检测中的边界框和坐标系介绍(含相关函数以及坐标变换的介绍)

    1 准备知识 参考 带你玩转 3D 检测和分割 二 核心组件分析之坐标系和 Box 知乎 1 1 坐标系介绍 激光雷达坐标系通常定义如下左图所示 其中指向前方 指向左方 指向上方 相机坐标系通常定义如上右图所示 其中指向右方 指向下方 指向
  • Logisim状态机的搭建

    有限状态机概述 有限状态机 Finite State Machine FSM 是表示有限个状态以及这些状态之间的转移和动作 输入 之间关系的离散模型 有限状态机是组合逻辑和寄存器逻辑的特殊组合 组合逻辑部分包括次态逻辑和输出逻辑 分别用于状
  • Bugku:Simple_SSTI_1

    很简单的模板注入 直接F12查看提示 flag在secret key下 bugku才是对萌新最友好的平台
  • linux 可执行文件反编译,如何反汇编,修改,然后重新组装一个Linux可执行文件?...

    我不认为有任何可靠的方法来做到这一点 机器码格式非常复杂 比assembly文件更复杂 编译的二进制文件 比如ELF格式文件 并不是真的有可能产生一个源代码汇编程序 它将编译成相同的 或类似的 二进制文件 为了理解差异 将GCC编译直接输出
  • linux命令之cal详解

    linux学习笔记之cal 在所有的类linux操作系统中 cal或者ncal命令会在命令行打印出一个有格式的日历 阳历 默认情况下 即不给定任何参数的情况下 cal和ncal将会输入本月的日历 并突出显示当前的日期 在Ubuntu22 0
  • 游戏王计算机兽,游戏王电脑堺卡牌——法王兽,吸血鬼谢里丹,龙龙,甲甲,凰凰...

    闇卡 真龙皇 法王兽 真龙皇 法 王 兽是真龙卡组的XYZ怪兽 也是真龙皇的boss卡 卡名带有真龙字段 种族为幻龙族 在设定上真龙皇与真龙互相敌对 幻龙族 超量 效果 9星怪兽 2只以上 1回合1次 把这张卡1个超量素材取除 宣言1个属性
  • leetcode55. 跳跃游戏

    给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例 1 输入 nums 2 3 1 1 4 输出 true 解释 可以先跳 1 步 从下标 0
  • BackgroundWorker

    BackgroundWorker的事件响应函数 private void backgroundWorker1 DoWork object sender DoWorkEventArgs e BackgroundWorker worker se
  • VueCLI4.x+Vue2.x 使用postcss-px2rem和lib-flexible解决自适应问题 (解决组件样式被修改失效问题)

    简介 前端页面移动端免不了需要自适应高度宽度字体大小等等 如果直接写rem的话那会很麻烦 前端还需要根据设计图自己去转rem写样式 那样会非常麻烦且不易维护 本文将介绍前端写px像素单位自动转为rem单位 步骤 一 安装组件 npm ins
  • Spring Cloud-09-微服务统统一认证方案 Spring Cloud OAuth2 + JWT

    文章目录 微服务架构下统 认证场景 微服务架构下统 认证思路 OAuth2开放授权协议 标准 OAuth2介绍 OAuth2协议角色和流程 什么情况下需要使用OAuth2 OAuth2的颁发Token授权 式 Spring Cloud OA
  • 综合布线系统6个独立的子系统介绍

    综合布线系统是一个用于传输语音 数据 影像和其他信息的标准结构化布线系统 是建筑物或建筑群的传输网络 它使语言和数据通信设备 交换设备和其他信息管理系统彼此相连接 综合布线的热物理结构一般采用模块化设计和分层星型拓扑结构 系统结构有6个独立
  • ElasticSearch存储介绍

    基本概念介绍 node 节点 一个运行中的 Elasticsearch 实例称为一个节点 而集群是由一个或者多个拥有相同 cluster name 配置的节点组成 它们共同承担数据和负载的压力 当有节点加入集群中或者从集群中移除节点时 集群
  • HTML5 LocalStorage 本地存储

    原文地址 http www cnblogs com xiaowei0705 archive 2011 04 19 2021372 html 说到本地存储 这玩意真是历尽千辛万苦才走到HTML5这一步 之前的历史大概如下图所示 最早的Cook
  • python 区块链_区块链Python实现

    区块链是如同链表的一组记录 每个区块含有一些信息以及与其他区块关联的方法 每个区块有前一个区块的哈希值 时间戳 数据 class Block def init self timestamp data previous hash self t
  • 普通人怎么学习从语言

    C语言是一种非常重要的编程语言 它广泛用于操作系统 编译器 嵌入式系统 单片机等许多领域 通过学习C语言 您可以更好地理解计算机体系结构 掌握基本的编程技能 还可以进一步学习面向对象的语言和图形用户界面框架 从而开发出各种不同类型的软件和应
  • 数据结构与算法--KMP算法查找子字符串

    数据结构与算法 KMP算法查找子字符串 部分内容和图片来自这三篇文章 这篇文章 这篇文章 还有这篇他们写得非常棒 结合他们的解释和自己的理解 完成了本文 上一节介绍了暴力法查找子字符串 同时也发现了该算法效率并不高 当失配位置之前已经有若干
  • 一维熵局部熵C++实现

    基于OpenCV的一维熵与局部熵C 实现 由于要将MATLAB代码都转换为C 代码 因此开始了艰苦卓绝的码代码过程 这其中又遇到了很多的坑 以及爬坑过程 我的环境的是Visual studio2017 OpenCV3 本文内容 一维熵与局部
  • mybatis-plus--配置-(sql)日志输出-自动填充-分页-多数据源-逻辑删除-配置加密

    写在前面 本文主要介绍mybatis plus的配置 以后在有的时候在补充 欢迎交流 文章目录 日志输出 自动填充 分页 全局字段配置 多数据源 配置加密 日志输出 调试的时候需要看执行的sql 这时候就很需要日志来记录查看了 mybati