当前位置: 首页 > news >正文

MybatisPlus(二)

目录

扩展功能

代码生成

静态工具

逻辑删除

枚举处理器

JSON处理器

配置加密

插件功能

插件功能

分页插件(通用分页实体)


扩展功能

代码生成

静态工具

逻辑删除

逻辑删除就是基于代码逻辑模拟删除效果,但并不会真正删除数据。思路如下:

在表中添加一个字段标记数据是否被删除
当删除数据时把标记置为 1
查询时只查询标记为 0 的数据

例如逻辑删除字段为deleted

删除操作:
UPDATE user SET deleted = 1 WHERE id = 1 AND deleted = 0
查询操作:
SELECT * FROM user WHERE deleted = 0

MybatisPlus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:

mybatis-plus:global-config:db-config:logic-delete-field: flag # 全局逻辑删除的实体字段名,字段类型可以是boolean、integerlogic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

逻辑删除本身也有自己的问题,比如:

会导致数据库表垃圾数据越来越多,影响查询效率
SQL 中全都需要对逻辑删除字段做判断,影响查询效率

因此,我不太推荐采用逻辑删除功能,如果数据不能删除,可以采用把数据迁移到其它表的办法。

枚举处理器

application.yml中配置全局枚举处理器:

mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

如何实现PO类中的枚举类型变量与数据库字段的转换?

给枚举中的与数据库对应 value 值添加 @EnumValue 注解
@Getter
public enum UserStatus {NORMAL(1, "正常"),FROZEN(2, "冻结");@EnumValueprivate final int value;@JsonValueprivate final String desc;UserStatus(int value, String desc) {this.value = value;this.desc = desc;}
}

在配置文件中配置统一的枚举处理器,实现类型转换

JSON处理器

@Data
@TableName(value = "tb_user", autoResultMap = true)
public class User {@TableField(typeHandler = JacksonTypeHandler.class)private UserInfo info;
}

配置加密

MyBatisPlus3.3.2版本开始提供了一个基于AES算法的加密工具,帮助我们对配置中的敏感信息做加密处理。

        //生成 16 位随机 AES 密钥String randomKey = AES.generateRandomKey();System.out.println("randomKey = " + randomKey);//利用密钥对用户名加密String username = AES.encrypt("root", randomKey);System.out.println("username = " + username);//利用密钥对密码加密String password = AES.encrypt("1234", randomKey);System.out.println("password = " + password);

application.yaml文件中使用刚刚生成的秘钥,代替明文的用户名和密码

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=truedriver-class-name: com.mysql.cj.jdbc.Driverusername: mpw:QWWVnk1Oal3258x5rVhaeQ== # 密文要以 mpw:开头password: mpw:EUFmeH3cNAzdRGdOQcabWg== # 密文要以 mpw:开头

在项目启动的时候,添加AES的秘钥,这样MyBatisPlus就可以解密数据了:

// Jar包启动参数,arguments
--mpw.key=d1104d7c3b616f0b 

单元测试时,可以通过@SpringBootTest来指定秘钥

插件功能

插件功能

MyBatisPlus基于MyBatisInterceptor实现了一个基础拦截器,并在内部保存了MyBatisPlus的内置拦截器的集合

MyBatisPlus提供的内置拦截器有下面这些:

序号

拦截器

描述

1

TenantLineInnerInterceptor

多租户插件

2

DynamicTableNameInnerInterceptor

动态表名插件

3

PaginationInnerInterceptor

分页插件

4

OptimisticLockerInnerInterceptor

乐观锁插件

5

IllegalSQLInnerInterceptor

SQL性能规范插件,检测并拦截垃圾SQL

6

BlockAttackInnerInterceptor

防止全表更新和删除的插件

分页插件(通用分页实体)

首先,要在配置类中注册MyBatisPlus的核心插件,同时添加分页插件: 

@Configuration
public class MybatisConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {// 1.初始化核心插件MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 2.添加分页插件PaginationInnerInterceptor pageInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);pageInterceptor.setMaxLimit(1000L); // 设置分页上限interceptor.addInnerInterceptor(pageInterceptor);return interceptor;}
}

接着,就可以使用分页的API了:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 卢松松:分享6个短视频拍摄设备
  • Linux Vim教程(十四):使用Vim进行项目管理
  • 基因克隆技术在医学领域的应用有哪些局限性?
  • 异常 29
  • Win10安装node版本管理工具nvm
  • MySQL学习笔记第三天
  • Prompt提示工程上手指南:基础原理及实践-Prompt个性知识库引导
  • 【Golang】短链接系统
  • matlab中的双层数值积分
  • 这本vue3编译原理开源电子书,初中级前端竟然都能看懂
  • 3.插件化系列之动态加载class示例
  • OverlayFS 文件系统介绍
  • 聊聊《思考,快与慢》
  • Synthesia——虚拟人物视频生成
  • springboot校园商店配送系统-计算机毕业设计源码68448
  • 《剑指offer》分解让复杂问题更简单
  • 2017-08-04 前端日报
  • Docker入门(二) - Dockerfile
  • Elasticsearch 参考指南(升级前重新索引)
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ES6系列(二)变量的解构赋值
  • HTTP请求重发
  • php面试题 汇集2
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Spring核心 Bean的高级装配
  • vue 配置sass、scss全局变量
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 仿天猫超市收藏抛物线动画工具库
  • 关于extract.autodesk.io的一些说明
  • 用element的upload组件实现多图片上传和压缩
  • 白色的风信子
  • Java总结 - String - 这篇请使劲喷我
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ‌移动管家手机智能控制汽车系统
  • # wps必须要登录激活才能使用吗?
  • # 数论-逆元
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Note)C++中的继承方式
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • .net SqlSugarHelper
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @RequestBody与@ResponseBody的使用
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [android] 练习PopupWindow实现对话框
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [C#]C#学习笔记-CIL和动态程序集
  • [codevs 1515]跳 【解题报告】