
MyBatisPlus全局Sql注入器与逻辑删除实践教程
下载需积分: 49 | 27KB |
更新于2025-04-27
| 52 浏览量 | 举报
收藏
在深入了解MyBatisPlus中全局Sql注入器的应用以及逻辑删除的使用示例代码之前,需要先介绍一下MyBatisPlus这一强大框架的基础概念,以及它的核心特性之一,逻辑删除是如何工作的。MyBatisPlus是在MyBatis基础上进行扩展的一个增强工具,它简化了代码的编写,并提供了诸如通用Mapper、条件构造器、分页插件等便利的功能,帮助开发者更高效地实现数据库交互。
### MyBatisPlus框架概念
MyBatisPlus框架是为了解决传统MyBatis需要编写大量模板代码的问题而生。通过提供一些内置的方法和注解,MyBatisPlus使得开发者的重心可以放在业务逻辑的实现上,而不是那些重复的、繁琐的CRUD操作。
### 全局Sql注入器
在MyBatisPlus中,Sql注入器(SqlInjector)是一个接口,其主要职责是定义一系列的SQL片段,这些SQL片段会被MyBatisPlus框架用于生成最终的SQL语句。在全局范围内自定义Sql注入器,意味着开发者可以在一个集中的地方定义SQL片段,并让所有的Mapper接口都能够使用这些自定义的SQL片段。
### 逻辑删除
逻辑删除是数据库操作中常用的一种处理方式,用以替代物理删除,即不从数据库中彻底删除数据记录,而是在数据表中增加一个字段(例如deleted或is_deleted),通过这个字段的值来标识记录是否被逻辑上删除。逻辑删除的好处是能够保留历史数据,对于需要保留历史记录的业务场景来说,非常有用。在MyBatisPlus中,逻辑删除功能可以通过配置来启用,并且可以自定义逻辑删除的字段名称和默认值。
### MyBatisPlus中逻辑删除使用示例代码
假设我们的数据库表中有如下结构:
```sql
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标志,0表示未删除,1表示已删除',
PRIMARY KEY (`id`)
);
```
在这个表中,我们使用了`deleted`字段作为逻辑删除的标志。现在,我们将通过MyBatisPlus实现逻辑删除,并给出示例代码。
首先,在MyBatisPlus的配置类中启用逻辑删除:
```java
@Configuration
@MapperScan("com.example.mapper")
public class MyBatisPlusConfig {
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setSqlInjector(new LogicSqlInjector());
return globalConfig;
}
// 配置逻辑删除处理器
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
// 配置逻辑删除值
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setDialectType("mysql");
paginationInterceptor.setLogicDeleteValue("1"); // 未删除
paginationInterceptor.setLogicNotDeleteValue("0"); // 已删除
return paginationInterceptor;
}
}
```
在上面的配置类中,我们首先定义了一个`GlobalConfig`实例,并将其`SqlInjector`设置为`LogicSqlInjector`,这是MyBatisPlus提供的一个逻辑删除的Sql注入器实现。同时,我们也定义了`PaginationInterceptor`,这个分页拦截器可以与逻辑删除结合使用,其中的`setLogicDeleteValue`和`setLogicNotDeleteValue`方法用来设置逻辑删除和未删除的值。
接下来是实体类中逻辑删除字段的配置:
```java
@Data
@TableName("user")
public class User {
private Long id;
private String name;
private String email;
@TableLogic
private Boolean deleted;
}
```
在这里,`@TableLogic`注解被用在了`deleted`字段上,它告诉MyBatisPlus这个字段是用来控制逻辑删除的。在使用`@TableLogic`注解时,字段类型应为`Boolean`,因为MyBatisPlus默认使用`Boolean`类型来判断记录是否删除。如果是其他类型(如`Integer`或`Byte`),需要在配置类中通过`LogicSqlInjector`的`setDeletedValue`和`setNotDeletedValue`方法进行相应设置。
然后是在Mapper接口中使用逻辑删除:
```java
public interface UserMapper extends BaseMapper<User> {
}
```
MyBatisPlus的`BaseMapper`接口已经包含了处理逻辑删除的方法,所以不需要在自定义Mapper接口中添加额外的方法。
最后,我们在服务层调用逻辑删除的方法:
```java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
public void logicDeleteUser(Long id) {
this.baseMapper.deleteById(id);
}
}
```
在上述示例中,我们使用了`ServiceImpl`类提供的`.deleteById`方法。这个方法内部将执行逻辑删除,将`deleted`字段的值更新为逻辑删除值(本例中为1)。
通过以上步骤,我们便成功地在MyBatisPlus项目中应用了全局Sql注入器,并且演示了如何使用逻辑删除。逻辑删除不仅可以保证数据的完整性,还可以在很多场景中避免因为直接物理删除数据带来的风险。需要注意的是,执行查询操作时,默认情况下不会返回那些已经逻辑删除的记录,除非在查询条件中明确指定包含它们。如果需要在查询时包含已逻辑删除的记录,可以使用`LambdaQueryWrapper`来进行条件构造:
```java
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getDeleted, false);
List<User> users = baseMapper.selectList(queryWrapper);
```
在上述代码中,`selectList`方法将会返回所有未逻辑删除的`User`记录。
通过以上的介绍和示例,可以看出MyBatisPlus通过全局Sql注入器和逻辑删除等高级特性,极大地方便了开发者对数据库的操作,让代码更加简洁,业务逻辑更加清晰。这仅仅是MyBatisPlus众多特性中的一部分,它还有许多其他高级功能,如自动填充、乐观锁插件、性能分析插件等,等待开发者去探索和应用。
相关推荐






霸道流氓气质

- 粉丝: 1w+
最新资源
- C#编程:深入讲解Media Player源码及使用心得
- 解决ListView项目刷新问题的方法
- 探索逼真翻页效果的照片展示技术
- MySQL 5.1.54 Win32安装程序下载指南
- CPCI驱动开发详解及PCI9054例程分享
- ASP.NET.Maker.v7.0.0.1:网页制作神器,快速实现网络梦
- 为Protel99se添加鼠标滚轮缩放功能教程
- xweibo:技术细节与应用案例分析
- 拖拽设计与代码自动生成:Ext3.0可视化开发工具使用教程
- JSP技术实现仿webQQ聊天系统教程
- AVR设备UART/USART通信调试与代码实践指南
- Lua编辑器及调试教程:自定义功能与文档学习
- 完整版Intel80x86汇编指令与机器码对照表
- C#实现Skype通信编程的嵌入源码指南
- 《Thinking In Java》第四版习题答案精讲
- R4三核内核整合方案:黄金太阳与游戏王2011完美运行
- STM32原理图库与PCB库设计参考指南
- C++学生管理系统实现信息增删改查功能
- Java编程基础入门教程精讲
- 掌握Verilog HDL:贝尔实验室的权威指南
- 简易可编辑的ListCtrl源码实现
- DSL技术实现与应用研究
- C语言散列表实现通讯录管理系统设计
- Java仿千千静听音乐播放器开发教程