第十章 【后端】商品分类管理微服务 > 分类列表查询接口(10.8.3)——MyBatis-Plus 逻辑删除
目录
- 引言
- MyBatis-Plus 概述
- 逻辑删除的概念
- MyBatis-Plus 中的逻辑删除实现
- 实际案例
- 5.1 项目背景
- 5.2 数据库设计
- 5.3 接口设计
- 代码实现
- 6.1 Maven 依赖
- 6.2 实体类设计
- 6.3 Mapper 接口
- 6.4 服务层实现
- 6.5 控制器层实现
- 测试用例
- 小结
1. 引言
在现代微服务架构中,商品分类管理是电商平台的重要组成部分。为了有效管理商品分类,开发者需要实现一个高效且灵活的分类列表查询接口。本章将重点介绍如何利用 MyBatis-Plus 实现逻辑删除功能,从而确保已删除的分类信息不会被直接删除,而是通过标记的方式进行管理。
2. MyBatis-Plus 概述
MyBatis-Plus 是一个 MyBatis 的增强工具,它简化了 CRUD 操作,并提供了丰富的功能,如自动生成 SQL、条件构造器、分页查询、逻辑删除等。它使得开发者能够更专注于业务逻辑的实现,而不必过于关注底层的数据库操作。
3. 逻辑删除的概念
逻辑删除指的是将数据的状态标记为“已删除”,而不是物理上从数据库中移除。这样做有几个优点:
- 数据安全性:可以避免误删数据带来的损失。
- 历史记录:保留了删除前的数据,有助于后续审计和恢复。
- 性能优化:在某些场景下,可以提高查询效率,因为避免了对物理删除的频繁操作。
4. MyBatis-Plus 中的逻辑删除实现
在 MyBatis-Plus 中,逻辑删除的实现非常简单。只需在实体类中定义一个表示删除状态的字段,并在配置文件中进行相应的配置即可。
4.1 配置逻辑删除字段
在实体类中,通常会使用 @TableLogic
注解标记逻辑删除字段。例如:
javaCopy Codeimport 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 Codemybatis-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 CodeCREATE 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 Codeimport 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 Codeimport com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface CategoryMapper extends BaseMapper<Category> {
// 额外的方法可以在此定义
}
6.4 服务层实现
服务层负责业务逻辑的实现:
javaCopy Codeimport 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 Codeimport 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 Codeimport 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 的逻辑删除功能来管理分类数据。通过这一实现,我们能够有效地管理删除的分类信息,同时保证数据的完整性和安全性。随着电商平台的不断发展,合理利用逻辑删除将成为数据管理的重要策略。