第十章 【后端】商品分类管理微服务 > 分类列表查询接口(10.8.3)——MyBatis-Plus 逻辑删除

目录

  1. 引言
  2. MyBatis-Plus 概述
  3. 逻辑删除的概念
  4. MyBatis-Plus 中的逻辑删除实现
  5. 实际案例
    • 5.1 项目背景
    • 5.2 数据库设计
    • 5.3 接口设计
  6. 代码实现
    • 6.1 Maven 依赖
    • 6.2 实体类设计
    • 6.3 Mapper 接口
    • 6.4 服务层实现
    • 6.5 控制器层实现
  7. 测试用例
  8. 小结

1. 引言

在现代微服务架构中,商品分类管理是电商平台的重要组成部分。为了有效管理商品分类,开发者需要实现一个高效且灵活的分类列表查询接口。本章将重点介绍如何利用 MyBatis-Plus 实现逻辑删除功能,从而确保已删除的分类信息不会被直接删除,而是通过标记的方式进行管理。

2. MyBatis-Plus 概述

MyBatis-Plus 是一个 MyBatis 的增强工具,它简化了 CRUD 操作,并提供了丰富的功能,如自动生成 SQL、条件构造器、分页查询、逻辑删除等。它使得开发者能够更专注于业务逻辑的实现,而不必过于关注底层的数据库操作。

3. 逻辑删除的概念

逻辑删除指的是将数据的状态标记为“已删除”,而不是物理上从数据库中移除。这样做有几个优点:

  • 数据安全性:可以避免误删数据带来的损失。
  • 历史记录:保留了删除前的数据,有助于后续审计和恢复。
  • 性能优化:在某些场景下,可以提高查询效率,因为避免了对物理删除的频繁操作。

4. MyBatis-Plus 中的逻辑删除实现

在 MyBatis-Plus 中,逻辑删除的实现非常简单。只需在实体类中定义一个表示删除状态的字段,并在配置文件中进行相应的配置即可。

4.1 配置逻辑删除字段

在实体类中,通常会使用 @TableLogic 注解标记逻辑删除字段。例如:

javaCopy Code
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; @TableName("category") public class Category { private Long id; private String name; @TableLogic // 表示逻辑删除字段 private Integer deleted; // 0表示未删除,1表示已删除 // getters and setters }

4.2 全局配置

在 MyBatis-Plus 的配置文件中,可以全局设置逻辑删除的值:

yamlCopy Code
mybatis-plus: global-config: db-config: logic-delete-value: 1 # 逻辑删除标记 logic-not-delete-value: 0 # 未删除标记

5. 实际案例

5.1 项目背景

假设我们正在开发一个电商系统,其中包含商品分类管理微服务。该服务需要支持对商品分类的增删改查操作,并且希望能够对被删除的分类进行管理。

5.2 数据库设计

我们设计一个名为 category 的表,包含以下字段:

字段名 数据类型 描述
id BIGINT 分类ID(主键)
name VARCHAR(50) 分类名称
deleted TINYINT 逻辑删除标记

SQL 语句如下:

sqlCopy Code
CREATE TABLE category ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, deleted TINYINT DEFAULT 0 );

5.3 接口设计

我们设计一个 RESTful API,用于查询分类列表。接口路径为 /api/categories,支持 GET 请求,返回所有未删除的分类。

6. 代码实现

6.1 Maven 依赖

pom.xml 中添加 MyBatis-Plus 和相关依赖:

xmlCopy Code
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency>

6.2 实体类设计

javaCopy Code
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; @TableName("category") public class Category { private Long id; private String name; @TableLogic private Integer deleted; // getters and setters }

6.3 Mapper 接口

创建一个 Mapper 接口用于数据访问:

javaCopy Code
import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface CategoryMapper extends BaseMapper<Category> { // 额外的方法可以在此定义 }

6.4 服务层实现

服务层负责业务逻辑的实现:

javaCopy Code
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service public class CategoryService extends ServiceImpl<CategoryMapper, Category> { public List<Category> getAllCategories() { return list(); // 默认只查询未删除的记录 } }

6.5 控制器层实现

控制器层接收请求并返回响应:

javaCopy Code
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/api/categories") public class CategoryController { @Autowired private CategoryService categoryService; @GetMapping public List<Category> getCategories() { return categoryService.getAllCategories(); } }

7. 测试用例

可以编写单元测试来验证我们的分类列表查询接口是否工作正常:

javaCopy Code
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; @SpringBootTest public class CategoryServiceTest { @Autowired private CategoryService categoryService; @Test public void testGetAllCategories() { List<Category> categories = categoryService.getAllCategories(); assertNotNull(categories); } }

8. 小结

本章介绍了如何在商品分类管理微服务中实现分类列表查询接口,并利用 MyBatis-Plus 的逻辑删除功能来管理分类数据。通过这一实现,我们能够有效地管理删除的分类信息,同时保证数据的完整性和安全性。随着电商平台的不断发展,合理利用逻辑删除将成为数据管理的重要策略。