10.MybatisPlus 逻辑删除操作

1.逻辑删除简介

逻辑删除是通过数据库字段标识来实现数据删除操作

2.逻辑删除实现

2.1. 在yml配置文件中添加配置
# mybatis-plus配置文件
mybatis-plus:
  # 指定mapper.xml文件位置
  mapper-locations: classpath*:mapper/*.xml
  # 逻辑删除配置
  global-config:
    db-config:
      logic-not-delete-value: 0 #逻辑没删除
      logic-delete-value: 1 #逻辑已删除
2.2. 在User中添加删除标识注解
   @TableLogic//删除标识
    private Integer deleted;//逻辑删除标识(0.未删除,1.已删除)

3.查询中排除删除标识字段及注意事项

排除删除标识字段在查询中显示,自定义的不起作用

    @TableLogic//删除标识
    @TableField(select = false)//排除查询显示
    private Integer deleted;//逻辑删除标识(0.未删除,1.已删除)
package com.mp.delete;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.mp.dao.UserMapper;
import com.mp.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * @Description //TODO
 * @Author LL
 * @Date 2020-03-26 16:47
 */
@SpringBootTest
@RunWith(SpringRunner.class)
public class deleteTest {

    private final static org.slf4j.Logger logger = LoggerFactory.getLogger(deleteTest.class);

    @Autowired
    private UserMapper userMapper;

    /**
     * 测试删除前后
     */
    @Test
    public void deleteById(){
        List<User> usersB = userMapper.selectList(null);
        logger.warn("-->删除前数据总数:"+usersB.size());

        int rows = userMapper.deleteById(1172422496554401794L);
        logger.warn("-->删除影响行数:"+rows);

        List<User> usersA = userMapper.selectList(null);
        logger.warn("-->删除后数据总数:"+usersA.size());
        usersA.forEach(System.out::println);
    }

    /**
     * 测试删除标识是否器作用
     */
    @Test
    public void select(){
        LambdaQueryWrapper<User> lambdaQuery = Wrappers.lambdaQuery();
        lambdaQuery.gt(User::getAge, 20);
        List<User> users = userMapper.selectList(lambdaQuery);
//        List<Map<String, Object>> users = userMapper.selectMaps(lambdaQuery);
        users.forEach(System.out::println);
    }
}

自定义删除方法,得在条件中添加删除过滤条件,或在SQL中添加删除过滤条件

package com.mp.dao;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.mp.entity.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;

/**
 * @Description 数据访问层
 * @Author LL
 * @Date 2020-03-26 16:09
 */
public interface UserMapper extends BaseMapper<User> {

    @Select("select * from tb_user ${ew.customSqlSegment}")
    List<User> mySelectList(@Param(Constants.WRAPPER)Wrapper<User> wrapper);
}
  /**
     * 自定义删除方法
     */
    @Test
    public void mySelect(){
        LambdaQueryWrapper<User> lambdaQuery = Wrappers.lambdaQuery();
        lambdaQuery.gt(User::getAge, 20).eq(User::getDeleted, 0);
        List<User> users = userMapper.mySelectList(lambdaQuery);
        users.forEach(System.out::println);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,987评论 0 15
  • Django 准备 “虚拟环境为什么需要虚拟环境:到目前位置,我们所有的第三方包安装都是直接通过 pip inst...
    33jubi阅读 1,347评论 0 5
  • 1、PHP语言的一大优势是跨平台,什么是跨平台?一、PHP基础: PHP的运行环境最优搭配为Apache+MySQ...
    __书山有路__阅读 1,528评论 0 15
  • 第3章 映射 映射是定义存储和索引的文档类型以及字段的过程。索引中的每一个文档都有一个类型,每种类型都有它自己的映...
    MR_ChanHwang阅读 2,321评论 0 1
  • 我在一个恬静又不失喧闹的小山村里,寻到了她。 爱我的那人从一出生就被否定了未来,那个固执的时代,女...
    巨鳄老头阅读 376评论 0 6