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

    千次阅读 2021-03-31 22:27:00
    MybatisPlus逻辑删除的使用 ** 首先我们要知道为什么要进行逻辑删除: 逻辑删除可以理解为假删除,并不是真的将数据进行删除。 假删除只是为了数据安全起见,在数据库中增添一个字段,我们可以默认这个字段为1时数据...

    **

    MybatisPlus——逻辑删除

    **
    首先我们要知道为什么要进行逻辑删除
    逻辑删除可以理解为假删除,并不是真的将数据进行删除。

    假删除只是为了数据安全起见,在数据库中增添一个字段,我们可以默认这个字段为1时数据被删除,而字段值为0时数据被删除

    逻辑删除是为了方便数据恢复和保护数据本身价值的一种方案。我们电脑里的回收站正是利用了逻辑删除,我们点击删除的文件不会被立刻删除,而是放入回收站,等我们反悔时可以将其进行还原。

    在MybatisPlus中设置逻辑删除有以下几个步骤

    1.首先为Strudent表添加logic_delete字段,通过判断logic_delete字段的数值,我们可以确定数据是否已被删除
    在这里插入图片描述

    2.如果logic_delete字段在数据库中并没有设置默认值(推荐设置默认值,这样更加方便),我们需要在applicationContext.xml文件中对默认值进行设置,已设置默认值可跳过此步

    
        <bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <!--配置globalConfig,在全局中对默认值进行设置-->
            <property name="globalConfig" ref="globalConfig"></property>
    
            <property name="dataSource" ref="dataSource"></property>
    
            <property name="configLocation" value="classpath:mybatis.xml"></property>
    
            <property name="typeAliasesPackage" value="com.yq.entity"></property>
        </bean>
    
        <bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
            <property name="dbConfig">
                <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
                <!-默认被删除为1-->
                    <property name="logicDeleteValue" value="1"></property>
                <!-默认未被删除为0-->
                    <property name="logicNotDeleteValue" value="0"></property>
                </bean>
            </property>
        </bean>
    

    3.实体类属性与表中字段保持一致,属性 logicDelete添加@TableLogic注解

    package com.yq.entity;
    
    import com.baomidou.mybatisplus.annotation.*;
    import com.baomidou.mybatisplus.extension.activerecord.Model;
    
    
    public class Student extends Model<Student> {
        @TableId(type = IdType.AUTO)
        private int stuNo;
        private String stuName;
        @Version
        private Integer version;
        private int stuAge;
    
        //逻辑删除字段
        @TableLogic
        private Integer logicDelete;//这里用Integer默认为null,而int默认为0,0会产生误解
    
    
        public Student(int stuNo, String stuName, Integer version, int stuAge) {
            this.stuNo = stuNo;
            this.stuName = stuName;
            this.version = version;
            this.stuAge = stuAge;
        }
    
        public Student(int stuNo, String stuName, int stuAge) {
            this.stuNo = stuNo;
            this.stuName = stuName;
            this.stuAge = stuAge;
        }
    
        public Student(String stuName, int stuAge) {
            this.stuName = stuName;
            this.stuAge = stuAge;
        }
    
        public Student() {
        }
    
        public int getStuNo() {
            return stuNo;
        }
    
        public void setStuNo(int stuNo) {
            this.stuNo = stuNo;
        }
    
        public String getStuName() {
            return stuName;
        }
    
        public void setStuName(String stuName) {
            this.stuName = stuName;
        }
    
        public int getStuAge() {
            return stuAge;
        }
    
        public void setStuAge(int stuAge) {
            this.stuAge = stuAge;
        }
    
    
    
        public Integer getVersion() {
            return version;
        }
    
        public void setVersion(Integer version) {
            this.version = version;
        }
    
        public Integer getLogicDelete() {
            return logicDelete;
        }
    
        public void setLogicDelete(Integer logicDelete) {
            this.logicDelete = logicDelete;
        }
    }
    
    

    4.进行简单调用,查看结果

        //测试假删
        public static void testLogicdelete(){
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            StudentMapper studentMapper = context.getBean("studentMapper", StudentMapper.class);
            studentMapper.delete(null);
        }
    
        public static void main(String[] args) throws Exception {
                        testLogicdelete();
        }
    

    执行方法之前的数据库表:
    在这里插入图片描述
    执行方法之后的数据库表:
    在这里插入图片描述

    此时我们查看日志发现
    我们原本执行的删除语句(delete from student ):
    在这里插入图片描述
    在日志中变为对logic_delete字段的更新操作:
    在这里插入图片描述

    执行删除语句后数据并没有被直接删除,而且MybatisPlus自动将logic_delete字段的值更新为1,使其处于假删状态,保证了数据安全。

    当我们数据库中所有数据的字段logic_delete为1,也就是被删除时,我们进行查询全部操作,发现
    select * from student语句被转换为
    SELECT stu_no,stu_name,version,stu_age,logic_delete FROM student WHERE logic_delete=0

    在这里插入图片描述

    MybatisPlus为我们自动进行了拼接操作将 WHERE logic_delete=0 在查询语句后进行拼接,以保证我们只能查询出
    logic_delete=0 ,也就是未被删除的数据

    展开全文
  • MybatisPlus 逻辑删除

    2021-05-19 19:47:48
    逻辑删除也就是在数据库中改变了一下状态一、数据库二、pojo类三、配置 一、数据库 二、pojo类 三、配置 在高版本中就只需要pojo加个注解,然后再配置一下就可以使用了 #能够在控制台打印sql语句 logging.level....

    逻辑删除也就是在数据库中改变了一下状态

    一、数据库

    在这里插入图片描述

    二、pojo类

    在这里插入图片描述

    三、配置

    在高版本中就只需要pojo加个注解,然后再配置一下就可以使用了

    #能够在控制台打印sql语句
    logging.level.com.hi.hhy.mapper=debug
    #逻辑删除
    mybatis-plus.global-config.db-config.logic-delete-value=1
    mybatis-plus.global-config.db-config.logic-not-delete-value=0
    

    如果不是还需要写个配置类(new LogicSqlInjector时爆红就可以只使用pojo注解和配置就ok了)

    package com.hi.hhy.config;
    
    import com.baomidou.mybatisplus.core.injector.ISqlInjector;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author LunarYouI
     * @create 2021-05-19 16:46
     */
    //配置类
    @Configuration
    public class MyLogic {
        /**
         * 逻辑删除插件
         * @return
         */
        @Bean
        public ISqlInjector sqlInjector() {
            return new LogicSqlInjector();
        }
    }
    

    使用逻辑删除操作实际也就是进行更新操作,只是把它的状态从0改为1,查找的时候会在条件后面默认加上一个deleted=0
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • mybatisplus逻辑删除

    2019-02-01 00:50:00
    逻辑删除 SpringBoot 配置方式: application.yml 加入配置(如果你的默认值和mp默认的一样,该配置可无): mybatis-plus: global-config: db-config: logic-delete-value: 1 # 逻辑已删除值(默认为 1) ...

    逻辑删除

    SpringBoot 配置方式:

    • application.yml 加入配置(如果你的默认值和mp默认的一样,该配置可无): 

      mybatis-plus:
        global-config:
          db-config:
            logic-delete-value: 1 # 逻辑已删除值(默认为 1)
            logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
    • 注册 Bean:
      import com.baomidou.mybatisplus.core.injector.ISqlInjector;
      import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      @Configuration
      public class MyBatisPlusConfiguration {
      
          @Bean
          public ISqlInjector sqlInjector() {
              return new LogicSqlInjector();
          }
      }
    • 实体类字段上加上@TableLogic注解
      @TableLogic
      private Integer deleted;
    • 效果: 使用mp自带方法删除和查找都会附带逻辑删除功能 (自己写的xml不会)
      example
      删除时 update user set deleted=1 where id =1
      查找时 select * from user where deleted=1
    • 附件说明

      逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。 如果你需要再查出来就不应使用逻辑删除,而是以一个状态去表示。 如: 员工离职,账号被锁定等都应该是一个状态字段,此种场景不应使用逻辑删除。 若确需查找删除数据,如老板需要查看历史所有数据的统计汇总信息,请单独手写sql。

    转载于:https://www.cnblogs.com/grocivey/p/10344592.html

    展开全文
  • 逻辑删除的优点和缺点MyBatisPlus逻辑删除组件MyBatisPlus实现逻辑删除使用MyBatisPlus逻辑删除组件 好久没有写博客了,今天我们来学习了一下MyBatisPlus的逻辑删除组件。 什么是逻辑删除? 在开发中,对数据的...

    好久没有写博客了,今天我们来学习了一下MyBatisPlus的逻辑删除组件。

    什么是逻辑删除?

    在开发中,对数据的删除操作是我们经常会执行的一种操作,用于删除存储在数据库中的一些错误数据或者不需要的数据,但是正常的删除操作是无法撤回的,也就是说,如果我们在系统中删除了一条数据之后,这条数据库就从系统的数据库中彻底删除了,通过普通手段是无法找回这条数据的。

    于是这个时候,逻辑删除也就诞生了。

    • 什么是逻辑删除?

    逻辑删除:就是不通过delete语句将数据从数据库删除, 而是通过一个字段的来标识数据是否被删除,这样被删除的数据并不是真的被删除了,而是通过字段的指进行了隐性删除,也被称作逻辑删除,或者软删除。

    与逻辑删除对应的,也就是通过delete语句将数据彻底删除的操作,我们一般也将其称作物理删除

    在MyBatisPlus的BaseMapper接口中,也为我们实现了一些通用的删除操作,可以更加方便我们的开发。但是在MyBatisPlus为我们自动生成的删除接口,都是数据物理删除,而不是逻辑删除。

    当然,其实MyBatisPlus也为我们实现了逻辑删除的功能,只不过这个功能默认是不开启的,如果我们需要使用MyBatisPlus的逻辑删除功能,那么需要我们配置逻辑删除的组件。

    逻辑删除的优点和缺点

    • 优点:数据操作更加安全,不会因为系统误删操作,而导致数据丢失,恢复数据更加容易。
    • 缺点:使用删除标识会改变查找和删除的逻辑,使查找和删除的逻辑要稍微复杂一些。

    MyBatisPlus逻辑删除组件

    MyBatisPlus的逻辑删除组件就是针对逻辑删除所带来的缺点而诞生的,使用MyBatisPlus的逻辑删除组件,能够无缝实现逻辑删除,而且对于简单的增删改查方法能够自动适应,而不需要我们另外编写SQL来实现逻辑删除。

    MyBatisPlus实现逻辑删除

    • 在数据库表上添加一个标识逻辑删除的字段
    `deleted` int(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标识,0为正常,1为逻辑删除',
    

    在这里插入图片描述

    • 在实体类上添加注解@TableLogic
    /**
     * 数据库数据逻辑删除标识字段
     */
    @TableLogic
    private Integer deleted;
    
    • 配置MyBatisPlus逻辑删除组件
    @Configuration
    @MapperScan("com.zero.sys.mapper")
    public class MyBatisPlusConfig {
        /**
         * 逻辑删除组件
         */
        @Bean
        public ISqlInjector sqlInjector() {
            return new LogicSqlInjector();
        }
    
    }
    
    • application.yml配置文件
    # MyBatisPlus的相关配置
    mybatis-plus:
      # 配置逻辑删除字段
      global-config:
        db-config:
          # 删除状态为1
          logic-delete-value: 1
          # 没有删除状态为0
          logic-not-delete-value: 0
    

    使用MyBatisPlus逻辑删除组件

    进行了上述配置之后,在使用MyBatisPlus内置的查找和删除方法时,会自动适配逻辑删除的配置,即在查找时,只会查找标识没有删除的记录,而在删除时,只会修改标识删除字段的值,而不会真的从数据库中删除数据。

    展开全文
  • MyBatisPlus逻辑删除MyBatisPlus逻辑删除 MyBatisPlus逻辑删除 物理删除:真实删除。将对一个数据从数据库中删除,之后查询不到删除的书。 逻辑删除:假删除。将对应数据中爱表是否被删除字段状态修改为“被删除...
  • MybatisPlus 逻辑删除失效原因及解决方案 mybatisplus官方的更新文档中表示 在3.1.1版本及以上 都不需要手动注册逻辑删除插件,但如果两者(mybatislplus依赖 和代码生成器依赖)版本不一致,则会出现逻辑删除失效 ...
  • 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;...
  • 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、官方说明二、配置 前言 最近在尝试一个电商项目,其中用到了Mybatis-Plus,之前未...更新:追加where条件防止更新到已删除数据
  • 在开发中,我们经常会有逻辑删除和唯一索引同时使用的情况。但当使用mybatis plus时,如果同时使用逻辑删除和唯一索引,会报数据重复Duplicate entry的问题。 举个例子: 原来数据库结构: 这里location_id是唯一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 416
精华内容 166
关键字:

mybatisplus逻辑删除