精华内容
下载资源
问答
  • 逻辑删除

    2021-04-03 17:07:34
    逻辑删除 逻辑删除:只是在字段deleted中设置是否被删除的标记,实际上数据还保留在数据库中,这样做便于解决操作失误,可以恢复数据; Mybatis-Plus做逻辑删除: 在配置类中导入逻辑删除插件 //逻辑删除插件 @...

    逻辑删除

    逻辑删除:只是在字段deleted中设置是否被删除的标记,实际上数据还保留在数据库中,这样做便于解决操作失误,可以恢复数据;
    Mybatis-Plus做逻辑删除:

    • 在配置类中导入逻辑删除插件
        //逻辑删除插件
        @Bean
        public ISqlInjector sqlInjector(){
            return new LogicSqlInjector();
        }
    
    
    • 在实体类逻辑删除字段上添加注解@TableLogic
        //逻辑删除
        @TableLogic
        private Integer deleted;
    
    • 测试类中测试
        @Test
        public void testDelete(){
            int delete = userMapper.deleteById("aaf633e65d4a48168a5f9e97f758184f");
            System.out.println(delete);
        }
    

    逻辑删除的时候要设置默认值,以下是设置默认值的sql语句。

    alter table sys_user alter column deleted set default 0;
    
    展开全文
  • 逻辑删除你有没有见过某些网站进行一些删除操作之后,你看不到记录了但是管理员却能够查看到。这里就运用到了逻辑删除。什么是逻辑删除逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表...

    逻辑删除

    你有没有见过某些网站进行一些删除操作之后,你看不到记录了但是管理员却能够查看到。这里就运用到了逻辑删除。

    什么是逻辑删除?

    逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识(deleted)或者说是状态字段(status)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。

    对应的SQL语句:

    update user set deleted=1 where id =1 and deleted=0

    update 表名 set deleted = 1 where id = 1;语句表示,在该表中将id为1的信息进行逻辑删除,那么客户端进行查询id为1的信息,服务器就不会提供信息。倘若想继续为客户端提供该信息,可将 deleted 更改为 0 。

    查找的话呢是通过加上条件deleted=0

    select * from user where deleted=0

    来自官网的配置,这里直接复制

    第一步 添加全局配置

    mybatis-plus:

    global-config:

    db-config:

    logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)

    logic-delete-value: 1 # 逻辑已删除值(默认为 1)

    logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

    第二步、在实体类上添加@TableLogic注解

    @TableLogic

    private Integer deleted;//对应的实体字段,实体字段需要根据数据库字段命名

    这样就会在预编译sql中自动给这个字段设置的值就是全局配置设置的值

    当然也可以设置局部生效 单个实体生效(不推荐)只需要在注解中添加

    完整的实体示例

    import com.baomidou.mybatisplus.annotation.TableLogic;

    import lombok.AllArgsConstructor;

    import lombok.Data;

    import lombok.NoArgsConstructor;

    import java.io.Serializable;

    import java.time.LocalDateTime;

    @Data

    @AllArgsConstructor

    @NoArgsConstructor

    public class User implements Serializable {

    private long id;

    private String name;

    private long age;

    private String email;

    private long managerId;

    private LocalDateTime createTime;

    private LocalDateTime updateTime;

    private long version;

    @TableLogic(value = "0",delval = "1") //value表示逻辑未删除值,delval表示逻辑删除设置的值

    private long deleted;

    }

    当然不建议这样操作,一般直接@TableLogic然后通过全局设置即可

    测试代码,其中的传入的是主键 刘红雨的id

    import org.junit.jupiter.api.Test;

    import org.junit.runner.RunWith;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.boot.test.context.SpringBootTest;

    import org.springframework.test.context.junit4.SpringRunner;

    import top.huashengshu.demo.dao.UserMapper;

    @SpringBootTest

    @RunWith(SpringRunner.class)

    class DemoApplicationTest {

    @Autowired

    UserMapper userMapper;

    @Test

    public void deleteTest(){

    int rows = userMapper.deleteById(1094592041087729666L);

    System.out.println("影响行数:"+rows);

    }

    }

    执行结果:

    4aad2c669d0df41c9750d73710b94b2a.png

    查看表中数据:

    b1ba977acfcc994de3f853f6dc1628f7.png

    到此这篇关于MybatisPlus实现逻辑删除功能的文章就介绍到这了,更多相关MybatisPlus 逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    展开全文
  • 删除又分为逻辑删除和物理删除,那么它们有什么区别呢?物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据。逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,...

    删除又分为逻辑删除和物理删除,那么它们有什么区别呢?

    物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据。

    逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。

    在我们日常开发中,为了保留数据,经常会使用逻辑删除的方式进行数据删除,下面我们就来看看物理删除与逻辑删除怎么实现的吧

    首先假设我有这样一张表

    3c54a35711a4f5f5c12ab24d95801e4d.png

    实体类:

    package com.atguigu.mybatis_plus.entity;

    import java.util.Date;

    import com.baomidou.mybatisplus.annotation.FieldFill;

    import com.baomidou.mybatisplus.annotation.IdType;

    import com.baomidou.mybatisplus.annotation.TableField;

    import com.baomidou.mybatisplus.annotation.TableId;

    import com.baomidou.mybatisplus.annotation.TableLogic;

    import lombok.Data;

    @Data

    public class User {

    @TableId(type = IdType.AUTO)

    private Long id;

    private String name;

    private Integer age;

    private String email;

    @TableField(fill = FieldFill.INSERT)

    private Date createTime;

    // @TableField(fill = FieldFill.UPDATE)

    @TableField(fill = FieldFill.INSERT_UPDATE)

    private Date updateTime;

    }

    userMapper接口:

    package com.atguigu.mybatis_plus.mapper;

    import com.atguigu.mybatis_plus.entity.User;

    import com.baomidou.mybatisplus.core.mapper.BaseMapper;

    // 继承BaseMapper后UserMapper就具有了CRUD功能

    public interface UserMapper extends BaseMapper{

    }

    一、物理删除

    1、根据id删除记录

    @Test

    public void testLogicDelete() {

    int count = userMapper.deleteById(1L); // 删除id为1的数据

    System.out.println("受影响的行数"+count);

    }

    2、批量删除

    @Test

    public void testDeleteBatchIds() {

    int result = userMapper.deleteBatchIds(Arrays.asList(2, 3, 4)); // 删除id为2,3,4的数据

    System.out.println(result);

    }

    结果:

    9e8bbb3e859ce8ec325138a50b699f47.png

    物理删除比较简单,接下来我们看看逻辑删除怎么实现吧!

    二、逻辑删除

    (1)数据库修改,添加 deleted字段

    01a094bd9500e2db28c3c333aaf440e4.png

    (2)实体类修改,添加deleted 字段,并加上 @TableLogic 注解

    /*

    加@TableLogic的情况下,程序内部会将delete语句变为update语句

    实际上我们写的代码并不需要做出什么改变

    */

    @TableLogic

    private Integer deleted;

    (3)测试

    /**

    * 逻辑删除

    */

    @Test

    public void testLogicDelete() {

    int count = userMapper.deleteById(5L);

    System.out.println("受影响的行数"+count);

    }

    结果:

    90c657ce40c2f3b1555b2cda69769dbd.png

    2f911a27dc5e0eb9f6a1ef3670fde34d.png

    测试后发现,数据并没有被删除,deleted字段的值由0变成了1

    测试后分析打印的sql语句,是一条update

    注意:被删除前,数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作

    (5)测试逻辑删除后的查询,MyBatis Plus中查询操作也会自动添加逻辑删除字段的判断

    @Test

    public void testSelect() {

    List users = userMapper.selectList(null); // 查询所有记录

    users.forEach(System.out::println); // 遍历输出

    }

    结果:

    9a04b47b2ff9aa3aef7f62e44e149ae0.png

    总结

    到此这篇关于MybatisPlus中的删除和逻辑删除及区别介绍的文章就介绍到这了,更多相关MybatisPlus删除和逻辑删除内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    时间: 2020-08-25

    展开全文
  • 删除又分为逻辑删除和物理删除,那么它们有什么区别呢?物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据。逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,...

    删除又分为逻辑删除和物理删除,那么它们有什么区别呢?

    物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据。

    逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。

    在我们日常开发中,为了保留数据,经常会使用逻辑删除的方式进行数据删除,下面我们就来看看物理删除与逻辑删除怎么实现的吧

    首先假设我有这样一张表

    57140854381446c58e021dbe2982c18f.png

    实体类:

    package com.atguigu.mybatis_plus.entity;

    import java.util.Date;

    import com.baomidou.mybatisplus.annotation.FieldFill;

    import com.baomidou.mybatisplus.annotation.IdType;

    import com.baomidou.mybatisplus.annotation.TableField;

    import com.baomidou.mybatisplus.annotation.TableId;

    import com.baomidou.mybatisplus.annotation.TableLogic;

    import lombok.Data;

    @Data

    public class User {

    @TableId(type = IdType.AUTO)

    private Long id;

    private String name;

    private Integer age;

    private String email;

    @TableField(fill = FieldFill.INSERT)

    private Date createTime;

    // @TableField(fill = FieldFill.UPDATE)

    @TableField(fill = FieldFill.INSERT_UPDATE)

    private Date updateTime;

    }

    userMapper接口:

    package com.atguigu.mybatis_plus.mapper;

    import com.atguigu.mybatis_plus.entity.User;

    import com.baomidou.mybatisplus.core.mapper.BaseMapper;

    // 继承BaseMapper后UserMapper就具有了CRUD功能

    public interface UserMapper extends BaseMapper{

    }

    一、物理删除

    1、根据id删除记录

    @Test

    public void testLogicDelete() {

    int count = userMapper.deleteById(1L); // 删除id为1的数据

    System.out.println("受影响的行数"+count);

    }

    2、批量删除

    @Test

    public void testDeleteBatchIds() {

    int result = userMapper.deleteBatchIds(Arrays.asList(2, 3, 4)); // 删除id为2,3,4的数据

    System.out.println(result);

    }

    结果:

    6fcf11dfcb84a8d77204083d7d2f525a.png

    物理删除比较简单,接下来我们看看逻辑删除怎么实现吧!

    二、逻辑删除

    (1)数据库修改,添加 deleted字段

    f57a5e68c4738e7cd3b4e5d03e920481.png

    (2)实体类修改,添加deleted 字段,并加上 @TableLogic 注解

    /*

    加@TableLogic的情况下,程序内部会将delete语句变为update语句

    实际上我们写的代码并不需要做出什么改变

    */

    @TableLogic

    private Integer deleted;

    (3)测试

    /**

    * 逻辑删除

    */

    @Test

    public void testLogicDelete() {

    int count = userMapper.deleteById(5L);

    System.out.println("受影响的行数"+count);

    }

    结果:

    1b9c6b9d53e2709eb65662739dc390f2.png

    2033d224c24c0d18f205de30742af650.png

    测试后发现,数据并没有被删除,deleted字段的值由0变成了1

    测试后分析打印的sql语句,是一条update

    注意:被删除前,数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作

    (5)测试逻辑删除后的查询,MyBatis Plus中查询操作也会自动添加逻辑删除字段的判断

    @Test

    public void testSelect() {

    List users = userMapper.selectList(null); // 查询所有记录

    users.forEach(System.out::println); // 遍历输出

    }

    结果:

    b270db49b1c18b5416224d051d46410c.png

    总结

    到此这篇关于MybatisPlus中的删除和逻辑删除及区别介绍的文章就介绍到这了,更多相关MybatisPlus删除和逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    展开全文
  • 在项目中,一般会遇到这种情况:逻辑删除以及多关联不删除逻辑删除(软删除):逻辑删除就是对要被删除的数据打上一个删除标记,通常使用一个is_deleted字段标示行记录是不是被删除(或者使用一个status字段代表所谓的...
  • 在项目中,一般会遇到这种情况:逻辑删除以及多关联不删除逻辑删除(软删除):逻辑删除就是对要被删除的数据打上一个删除标记,通常使用一个is_deleted字段标示行记录是不是被删除(或者使用一个status字段代表所谓的...
  • MybatisPlus逻辑删除

    千次阅读 2021-03-31 22:27:00
    MybatisPlus逻辑删除的使用 ** 首先我们要知道为什么要进行逻辑删除逻辑删除可以理解为假删除,并不是真的将数据进行删除。 假删除只是为了数据安全起见,在数据库中增添一个字段,我们可以默认这个字段为1时数据...
  • 特别是互联网项目,对于数据一般是不能删除的(涉及到后面的数据分析),这就涉及到逻辑删除。所谓逻辑删除指的是数据并不是真正的删除,只是改数据表对应数据的状态(数据表中通常有一列叫delFlag,以此标识正常状态或...
  • 物理删除和逻辑删除

    2020-05-11 15:21:38
    逻辑删除:并没有真正的删除,只是通过添加一个标志位,通过改变标志位的值,来判断数据是否被删除。 MybatisPlus实现逻辑删除: 1.实体类属性加上@TableLogic注解 // 开启逻辑删除 @TableLogic // 开启自动填充 @...
  • 一、参考地址https://mp.baomidou.com/guide/logic-delete.html#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%EF%BC%9A逻辑删除对比物理删除一直在用,确不知道此方法是逻辑删除二、过程1、添加字段 isdel= 1 为 逻辑删除=...
  • 第一步现在yml中配置一下文件 mybatis-plus: global-config: db-config: logic-delete-value: -1 # 逻辑已删除值(默认为 1) ...第四步逻辑删除方法的实现 第五步查询已逻辑删除的数据方法 ...
  • 一:逻辑删除所谓的逻辑删除,可以理解为“名誉”上的删除!名为删除,其实并未真正删除!当我们对一个对象进行删除操作之后,那么,这个对象会跑到哪里呢?如下图,跑到回收站里面去了!删除一个对象,它会跑到回收...
  • 特别是互联网项目,对于数据一般是不能删除的(涉及到后面的数据分析),这就涉及到逻辑删除。所谓逻辑删除指的是数据并不是真正的删除,只是改数据表对应数据的状态(数据表中通常有一列叫delFlag,以此标识正常状态或...
  • 什么是逻辑删除所谓逻辑删除是指数据已经“不需要”了,但是并没有使用delete语句将这些数据真实的从数据库中删除,而只是用一个标志位将其设置为已经删除。为什么需要逻辑删除对数据进行逻辑删除,一般存在以下原因...
  • 逻辑删除与物理删除

    2018-12-08 23:43:08
    逻辑删除: 逻辑删除:其实是UPDATE,增加一个逻辑状态的列(0|1)0表示删除 自己设置一个逻辑字段,例如1表示有效,0表示删除即可,默认是1. update biao set 逻辑删除=0 给符合条件的记录打上删除标记,可用RECALL...
  • django中实现逻辑删除

    万次阅读 2018-11-06 12:14:17
    django中实现逻辑删除,主要分三步: 1.增加字段: is_delete = models.BooleanField(default=False, verbose_name='逻辑删除', help_text='逻辑删除') 2.重写models中delete方法: def delete(self, using=None, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,553
精华内容 7,021
关键字:

逻辑删除