Mybatis plus逻辑删除注解@TableLogic的使用
目录
- 物理删除和逻辑删除
- @TableLogic注解
- @TableLogic注解默认值:
- @TableLogic注解用法
首先这个注解是苞米豆出品,也就是我们常说的mybatis升级版的东西。
简单讲一下这个注解的用法:我们在做数据库设计的时候有时候哪怕是删除也不会真的走物理删除,毕竟这样很多数据就不可恢复了,大多数时候很多删除都是用逻辑删除。
物理删除和逻辑删除
简单来说物理删除就是真的把这条数据从数据库删除了。
而逻辑删除主要是把表中的某一个字段作为标识符,一般我们常用的会默认初始为0,当我们想要删除这条数据的时候会把这个标识符改成1。这样在我们的常识里这条记录就被删除了。并且任何的查询都会添加这个条件,也就是要在代码中保证查询出来的数据是有效的。
@TableLogic注解
@TableLogic注解默认值:
刚刚已经说了这个注解是用于逻辑删除的,代表一个标识符,既然是标识符肯定要有值了,比如我上面说的0表示存在,1表示删除。但是不能排除有的设计就是不按照常理,比如1表示存在,2表示删除。所以@TableLogic注解是可以设置默认值的。用法如下:
@TableLogic(value=“存在标识”,delval=“删除标识”) private Integer del_flag;
如果不写value和delval会默认存在标识是0.删除标识是1.
@TableLogic注解用法
这个注解的用处就比较简单了,当我们在实体类中某一个字段添加了这个注解,就相当于告诉mp这个字段是个标识符。我们调用BaseMapper或者调用IService的所有增删改查方法会受影响。
- 查询的时候用条件构造器,不用再对这个字段进行判断,会自动筛选出存在的值。这里需要注意拿我上面的demo举例:哪怕我们传条件del_flag = 1,也不会生效。简单总结下:用mp条件构造器查询出来的结果一定是逻辑存在的
- 修改的时候差不多,如果我们把实体对象的del_flag 赋值为1然后保存,也是保存不成功的。
- 删除的时候我们如果不用这个注解,用mp的delete方法或者remove方法都是物理删除。但是如果用了这个注解,那么所有的delete方法或者remove方法都是逻辑删除,也就是将del_flag 改为1.
需要注意的是上面说的都只对mp的查询有影响,我们用xml或者注释的方式自己写sql是不生效的!
本篇笔记就记到这里,如果稍微帮到你了记得点个喜欢点个关注,也祝大家工作顺顺利利!其实这个知识点是新公司学到的东西,以前不知道所有的逻辑删除都要自己写,虽然能实现但是也麻烦的很,有时候我会觉得所谓的技术不见得是写出别人写不出来的东西,而是知道,使用,制作更好的轮子。愿我们都在前进的路上!
到此这篇关于Mybatis plus逻辑删除注解@TableLogic的文章就介绍到这了,更多相关Mybatis plus @TableLogic内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
关于mybatis-plus逻辑删除无效的问题
添加如下注解value代表默认值delval代表删除时的值 /** * 是否删除 */ @TableLogic(value = "0", delval = "1") @TableField(value = "del_flag") private Boolean delFlag; 下图是配置全部代码(如您知道上一步配置该添加到哪里,那就请忽略下面的代码配置) import com.baomidou.mybatisplus.core.injector
-
MybatisPlus中的删除和逻辑删除及区别介绍
删除又分为逻辑删除和物理删除,那么它们有什么区别呢? 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据. 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为"被删除状态",之后在数据库中仍旧能看到此条数据记录. 在我们日常开发中,为了保留数据,经常会使用逻辑删除的方式进行数据删除,下面我们就来看看物理删除与逻辑删除怎么实现的吧 首先假设我有这样一张表 实体类: package com.atguigu.mybatis_plus.entity; import
-
mybatis-plus3.4.0逻辑删除报错的解决
特别注意!!! 无论数据库字段,实体类字段,还是平时取其它字段名字时候,或者方法这些名字,一定不能和关键字重名,因为这样可能出现一些让人无法看出的错误 在进行mybatis-plus逻辑删除字段时候,我在数据库定义了delete字段定义为int类型,默认值是0,然后又在实体类中定义了这个字段delete并且在实体类的这个字段上面添加了注解@TableLogic,并且在application.properties中开启.(我使用的是3.4.0) 根据官方文档,在3.4.0版本中只需要以上两个步骤即
-
MyBatis Plus逻辑删除和分页插件使用详解
概要:Mybatis plus 官网链接 :https://mp.baomidou.com/guide/ 一.依赖配置: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x
-
MyBatis-Plus之逻辑删除的实现
特别是互联网项目,对于数据一般是不能删除的(涉及到后面的数据分析),这就涉及到逻辑删除.所谓逻辑删除指的是数据并不是真正的删除,只是改数据表对应数据的状态(数据表中通常有一列叫delFlag,以此标识正常状态或删除状态).逻辑删除一般都是更新操作,但写大量更新方法无疑是增加代码量,MyBatis-Plus又是如何实现逻辑删除的呢?其实很简单一共两步. 一.配置文件配置 mybatis-plus: global-config: db-config: logic-delete-value: 1 #
-
详解MyBatisPlus逻辑删除与唯一索引冲突问题
1.问题背景: 在开发中,我们经常会有逻辑删除和唯一索引同时使用的情况.但当使用mybatis plus时,如果同时使用逻辑删除和唯一索引,会报数据重复Duplicate entry的问题. 举个例子: 原来数据库结构: 这里location_id是唯一索引 CREATE TABLE `eam_location` ( `id` int(11) NOT NULL AUTO_INCREMENT, `location_id` varchar(50) UNIQUE NOT NULL COMMENT '位
-
MybatisPlus实现逻辑删除功能
逻辑删除 你有没有见过某些网站进行一些删除操作之后,你看不到记录了但是管理员却能够查看到.这里就运用到了逻辑删除. 什么是逻辑删除? 逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识(deleted)或者说是状态字段(status)做修改操作.比如0是未删除,1是删除.在逻辑上数据是被删除的,但数据本身依然存在库中. 对应的SQL语句: update user set deleted=1 where id =1 and deleted=0 update
-
MyBatis-Plus的物理删除和逻辑删除(使用场景)
物理删除:真实删除,将数据从数据库中删除,删除后查询不到被删除的数据 逻辑删除:假删除,方便删除之后的数据恢复 在表中添加一个status字段,作为删除的标准,每次删除时,修改标志位,0代表没有删除,1代表删除 被删除记录的status字段被修改为"被删除状态"(1),删除后还可以查询到数据 逻辑删除的使用场景 1.需要进行数据恢复 2.有关联数据,不便删除 # mysql //测试逻辑删除 status int null default null # 实体类 //实现逻辑删除 @Ta
-
Mybatis plus逻辑删除注解@TableLogic的使用
目录 物理删除和逻辑删除 @TableLogic注解 @TableLogic注解默认值: @TableLogic注解用法 首先这个注解是苞米豆出品,也就是我们常说的mybatis升级版的东西. 简单讲一下这个注解的用法:我们在做数据库设计的时候有时候哪怕是删除也不会真的走物理删除,毕竟这样很多数据就不可恢复了,大多数时候很多删除都是用逻辑删除. 物理删除和逻辑删除 简单来说物理删除就是真的把这条数据从数据库删除了.而逻辑删除主要是把表中的某一个字段作为标识符,一般我们常用的会默认初始为0,当我们
-
Mybatis plus逻辑删除失败的BUG操作
开发调试的时候发现Mybatis Plus的逻辑删除失效了,看了下配置文件发现没有问题,通过查看以下源码发现 逻辑删除需要注入的bean,查看这个bean的源码如下 查看其中一个实例的类的源码,如通过ID逻辑删除LogicDeleteById的源码,如下 mp在项目启动时预加载SQL是通过TableInfo中logicDelete字段判断是否开启逻辑删除的.然后让我们来看看mp内部是如何判断是否开启逻辑删除的. 先看如下源码 大概就是讲实体类中的字段进行循环映射数据库字段并封装到TableFie
-
mybatis plus实现分页逻辑删除
一.分页 通过mybatis-plus实现分页,也是很简单,插件大法. 1.配置分页插件 把分页的插件也配置到统一的配置类里: @Configuration // 配置扫描mapper的路径 @MapperScan("com.pingguo.mpdemo.mapper") public class MpConfig { // 乐观锁插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { re
-
MyBatis-Plus逻辑删除和字段自动填充的实现
目录 一.ID生成策略 1.使用@TableId注解 2.全局ID生成策略 二.逻辑删除 1.全局配置 2.使用@TableLogic注解 三.字段自动填充 1.指定字段自动填充 2.自定义MetaObjectHandler 3.测试 四.执行SQL分析打印 1.添加 spy.properties配置文件 2.修改数据源配置 3.测试查询 一.ID生成策略 1.使用@TableId注解 @TableId注解:主键注解 使用位置:实体类主键字段. @Data @ToString @TableNam
-
mybatis-plus 通用字段自动化(如逻辑删除和更新时间等)
一般来说某些项目比较规范的情况下,大多数表都会有逻辑删除字段和通用字段,例如更新时间,创建时间,更新人,创建人等等,但是在代码开发上会产生很多冗余的代码,逻辑删除的话,自己写比较繁琐,而且容易有遗漏逻辑. 本来打算自己写切面去实现,偶然发现mybatis-plus已经帮封装实现了,试了一下,很好用,所以分享一下. 逻辑删除 逻辑删除的意思就是某些业务表,在用户删除某条数据的时候,不真正删除,而是将此数据某字段改成类似"已删除",而查询语句.更新语句等会忽略此条被逻辑删除的数据. 这里就
-
MyBatis-Plus解决逻辑删除与唯一索引的问题
目录 简介 问题复现 建库建表 代码 测试 解决方案 方案1:将字段设置为id(推荐) 方案2:将字段设置为当前时间(不推荐) 简介 说明 本文用示例介绍MyBatis-Plus如何解决逻辑删除与唯一索引的问题. 物理删除与逻辑删除 数据是很重要的,数据库里的数据在删除时一般不会用DELETE语句直接物理删除. 通常的做法是使用逻辑删除,也就是:新加一个标记是否删除的字段,在删除时不是真的删除,而是使用UPDATE语句将某个字段设置为删除状态.例如:"deleted_flag",0表示
-
mybatis-plus getOne和逻辑删除问题详解
1.getOne 如果查询出的结果有多个,这时候会抛异常 这样就不用每次getOne的Wrapper后面还跟last("limit 1") 2.@TableLogic 就不用每次list查询的时候跟上 .eq("deleted",false)了 PS:下面再次强调下Mybatis-Plus中的逻辑删除 1. 需要在删除的字段上添加注解@TableLogic 2. 在配置文件中写上配置 mybatis-plus: global-config: db-config: l
随机推荐
- Mint UI 基于 Vue.js 移动端组件库
- go语言简单网络程序实例分析
- AngularJs基本特性解析(一)
- java多线程编程之使用runnable接口创建线程
- 自己写了一个php检测文件编码的函数
- 浅谈javascript函数劫持[转自xfocus]第1/3页
- Js密码强度实时验证代码
- php数据入库前清理 注意php intval与mysql的int取值范围不同
- PHP5.2中PDO的简单使用方法
- JavaScript实现图像模糊化的方法实例
- BootStrap下拉框在firefox浏览器界面不友好的解决方案
- 微信小程序使用navigateTo数据传递的实例
- mac下配置和访问阿里云服务器(Ubuntu系统)的图文教程
- Java编程发展历史(动力节点Java学院整理)
- 解析StreamReader与文件乱码问题的解决方法
- 模拟兼容性的 inline-block 属性
- OpenCV实现人脸检测
- 详解html-webpack-plugin用法全解
- Python使用matplotlib绘制余弦的散点图示例
- vue实现同一个页面可以有多个router-view的方法