SpringBoot+Mybatis-Plus实现逻辑删除

所谓逻辑删除根本上就是我们指定一个字段更改它的状态来标记这条数据是否被删除,和普通的删除相比逻辑删除的数据并不会真正的丢失,只是不展示出来而已。但是我们在查询的时候也是要考虑到的。Mybatis-Plus提供了这个功能。

springboot jpa 批量删除 springboot删除功能_springboot jpa 批量删除

官网的截图:侵删

注意只对自动注入的sql有效,自己去写的sql还是要加入限制条件的


下面就讲怎么去使用

1. 建表

必须要有代表逻辑删除的字段,类型在第一张图里 最好将这个字段设置成初始值为0,代表着未删除

CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
  `age` int(10) NULL DEFAULT NULL COMMENT '年龄',
  `deleted` int(1) NULL DEFAULT NULL COMMENT '是否删除',
  PRIMARY KEY (`id`) USING BTREE
)

2. 创建一个Spring boot项目

具体怎么来可以百度搜

springboot jpa 批量删除 springboot删除功能_mybatis_02


大约是这种结构,小鸟是因为插件

3. 引入依赖

<?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"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--        数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
<!--        lombok 可以不用引入 如果不引入记得实体类生成get/set方法-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--        mabtis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>3.4.1</version>
        </dependency>
    </dependencies>
</project>

4.编写spring boot的配置文件 applicetion.yml

!!!注意数据库用自己的

server:
#  启动后的端口号
  port: 8080
spring:
#  数据库设置  记得换成自己的设置
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/charts?serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
#  mybatis xml文件的位置
  mapper-locations: classpath:mapper/*.xml
  global-config:
    db-config:
#      字段删除时的标记
      logic-delete-value: 1
#      字段未删除时的标记
      logic-not-delete-value: 0
#      全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-field: deleted

5.实体类

一定要加上这个注解

package com.example.pojo;

import java.io.Serializable;

import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;

/**
 * @TableName user
 */
//这个注解如果报错就是没有引入lombok 或者没有安装lombok插件 删除之后生成get/set方法即可
@Data
public class User implements Serializable {
    /**
     * id
     */
    private Long id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 是否删除
     * 这里一定要加这个注解  代表删除字段的标记
     */
    @TableLogic
    private Integer deleted;
}

6.Dao层

package com.example.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.pojo.User;
import org.springframework.stereotype.Repository;

/**
 * 注意继承BaseMapper类,里面有mybatis-plus为我们提供的一些方法
 * 而且只有这些提供的方法才能使用逻辑删除
 */
@Repository
public interface UserDao extends BaseMapper<User> {

}

太麻烦就不写service层了,直接从Conrtoller层调用Dao层,但是大家在学习和工作要养成规范的好习惯

7.Controller层

package com.example.controller;


import com.example.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    UserDao userDao;
    @PostMapping("deleteUserById")
    public boolean deleteUserById(long id){
        //调用mybatis-plus提供的删除方法
        int result = userDao.deleteById(id);
        if (result>0){
            return true;
        }else {
            return false;
        }
    }
}

8.注意

最后别忘了在启动类加这个注解,参数是dao包

springboot jpa 批量删除 springboot删除功能_spring boot_03

启动

如果看到下面的东西就是启动成功了

springboot jpa 批量删除 springboot删除功能_mybatis_04

测试一下

数据库

springboot jpa 批量删除 springboot删除功能_mybatis_05


请求返回

springboot jpa 批量删除 springboot删除功能_spring_06


再看数据库

springboot jpa 批量删除 springboot删除功能_spring boot_07


最后查看数据库的时候别忘了刷新一下

查询我就不写了,感兴趣的可以写一个查询试试看看是否回过滤掉,当然写个博客更好了