逻辑删除与sql性能分析

迷人的老约翰 2021-06-25 01:37:36 23087 0 0 0

逻辑删除

2021-06-25 09:29:21 星期五

物理删除 :从数据库中直接移除

逻辑删除 :再数据库中没有被移除,而是通过一个变量来让他失效! deleted = 0 => deleted = 1

类似于回收站,

只对自动注入的sql起效:

  • 插入: 不作限制
  • 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
  • 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
  • 删除: 转变为 更新
  • 删除: update user set deleted=1 where id = 1 and deleted=0
  • 查找: select id,name,deleted from user where deleted=0

设置表结构

图片alt


图片alt


设置实体类属性

@TableLogic注解是逻辑删除,并不会永久删除数据,实体类加上这个注解再执行删除方法的时候会变成修改。前台再根据所加注解字段进行显隐即可达到逻辑删除效果

图片alt


配置类

图片alt


执行删除

图片alt


再次查询时,增加where条件,记录依旧在数据库,但是值确已经变化了!

图片alt

图片alt


sql性能分析

–作用:性能分析拦截器,用于输出每条 SQL 语句及其执行时间

导入插件

@Bean
// 设置dev test环境开启,保证运行效率
@Profile({"dev","test"})
public PerformanceInterceptor testPerformanceInterceptor(){
    PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
    // 设置sql执行的最大时间(ms),如果超过了则不执行
    performanceInterceptor.setMaxTime(100);

    // 是否格式化代码
    performanceInterceptor.setFormat(true);
    return performanceInterceptor;
}

####设置环境
profiles: active: dev #设置测试环境

执行代码

图片alt

执行失败的错误

图片alt