mybatis-plus设置逻辑删除字段
时间: 2024-03-06 15:43:59 浏览: 296
MyBatis-Plus是一个基于MyBatis的增强工具,它提供了很多便捷的功能来简化开发。其中,逻辑删除是MyBatis-Plus的一个重要特性之一。
在MyBatis-Plus中设置逻辑删除字段需要以下几个步骤:
1. 在数据库表中添加一个用于标识逻辑删除的字段,通常是一个整型字段,例如`is_deleted`。
2. 在实体类中添加一个与数据库表中逻辑删除字段对应的属性,并使用`@TableLogic`注解进行标记。例如:
```java
@TableLogic
private Integer isDeleted;
```
3. 在MyBatis-Plus的配置文件中开启逻辑删除功能。可以通过在配置文件中添加以下配置来实现:
```xml
<configuration>
<global-config>
<db-config>
<logic-delete-value>1</logic-delete-value>
<logic-not-delete-value>0</logic-not-delete-value>
</db-config>
</global-config>
</configuration>
```
其中,`<logic-delete-value>`表示逻辑删除时的值,`<logic-not-delete-value>`表示未删除时的值。
通过以上步骤,就可以在使用MyBatis-Plus进行数据库操作时实现逻辑删除功能了。
相关问题
mybatis-plus-join 指定字段
### 如何在 MyBatis-Plus 中使用 Join 查询并指定字段
在 MyBatis-Plus 的生态系统中,`mybatis-plus-join` 是一款非常强大的多表联查插件。它允许开发者轻松实现复杂的联表查询逻辑,并且可以灵活地指定需要的字段。
#### 插件简介
`mybatis-plus-join` 提供了一种无缝的方式来进行多表联查,完全遵循 MyBatis-Plus (MP) 的设计风格[^3]。这意味着如果你已经熟悉 MP 的基本用法,则无需学习新的语法即可快速上手 `mybatis-plus-join`。
---
#### 指定字段的方法
当使用 `mybatis-plus-join` 进行联表查询时,可以通过以下几种方法来指定所需的字段:
1. **通过 Select 方法显式声明所需字段**
在构建查询条件时,可以直接调用 `select()` 方法来明确指出希望获取哪些字段。这不仅提高了性能,还减少了不必要的数据传输。
```java
List<UserVo> list = new MpJLambdaWrapper<>()
.select(User::getUserId, User::getName) // 显式选择 userId 和 name 字段
.leftJoin(Department.class, d -> d.getDeptId().eq(User::getDeptId))
.list(new UserVo());
```
2. **利用自定义 VO 类映射特定字段**
如果仅需部分字段而不是整个实体对象,可以创建一个专门用于接收查询结果的数据传输对象 (DTO 或 VO),并通过构造器注入或手动赋值完成字段匹配。
```java
public class UserDepartmentVo {
private Long userId;
private String userName;
private String departmentName;
// Getters and Setters...
}
```
配合上述代码片段中的 `UserVo` 替换为目标类实例化即可。
3. **设置别名以区分同名列冲突**
当两个表存在相同名称列的情况下(如 id),可通过设定别名为每张表分配唯一标识符从而避免混淆问题发生。
```java
List<Map<String, Object>> resultMaps = new MpJWrapper()
.selectAs(User::getId, "userId") // 将 user 表 ID 设置为 userId 别名
.selectAs(Department::getId, "deptId") // 将 department 表 ID 设为 deptId 别名
.innerJoin(Department.class, Department::getUserId.eq(User::getId))
.getResultMap();
```
4. **链式调用来简化复杂 SQL 构建过程**
借助 Lambda 表达式的强大功能以及流利接口模式的支持下,能够更加直观简洁地表达我们的意图而不需要编写冗长繁琐的传统字符串拼接形式SQL语句。
---
#### 示例代码展示
以下是基于官方文档的一个简单例子演示如何执行带字段筛选的 JOIN 操作:
```java
// 导入必要的依赖包
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.ylchang.mpj.MpJLambdaWrapper;
import java.util.List;
public class ExampleService {
public void queryWithFields() {
// 创建 Wrapper 对象
MpJLambdaWrapper<OrderEntity> wrapper = new MpJLambdaWrapper<>();
// 添加联结条件
wrapper.innerJoin(ProductEntity.class,
product -> product.getId().eq(OrderEntity::getProductId));
// 指定要查询的字段
wrapper.select(
OrderEntity::getOrderId, // 订单编号
ProductEntity::getProductName // 商品名称
);
// 执行分页查询
Page<OrderProductVO> pageResult = orderMapper.pageJoin(
new Page<>(current, size),
wrapper.allEq(map),
OrderProductVO.class // 自定义的结果集模型
);
System.out.println(pageResult);
}
}
```
此示例展示了如何在一个订单管理系统里关联产品信息的同时只提取必要属性组合成一个新的视图结构。
---
### 总结
综上所述,在 MyBatis-Plus 中借助第三方库 `mybatis-plus-join` 能够方便快捷地达成跨多个关系型数据库表格之间相互参照的需求;与此同时还可以精确控制最终输出记录所含有的具体项数及其顺序安排等问题[^4]。
mybatis-plus配置逻辑删除
### 配置 MyBatis-Plus 逻辑删除功能
MyBatis-Plus 提供了一种简单的方式来实现逻辑删除的功能,通过配置全局策略以及实体类中的字段属性来完成这一需求[^3]。
#### 全局配置
在 `application.yml` 或者 `application.properties` 文件中定义逻辑删除的相关参数:
```yaml
mybatis-plus:
global-config:
db-config:
logic-delete-value: 1 # 数据库中表示已删除的值
logic-not-delete-value: 0 # 数据库中表示未删除的值
```
上述配置指定了逻辑删除的核心规则:当某个记录被标记为“已删除”,其对应的字段会被设置为 `logic-delete-value` 值;而正常状态下的记录则会保持为 `logic-not-delete-value` 值。
#### 实体类配置
为了使逻辑删除生效,在实体类中需要指定参与逻辑删除操作的字段,并标注相应的注解。通常情况下,这个字段被称为 `deleted` 或类似的名称。
```java
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("your_table_name") // 替换为实际表名
public class YourEntity {
@TableLogic
private Integer deleted; // 对应数据库中的逻辑删除字段,默认值为 0 表示未删除,1 表示已删除
// Getter and Setter 方法省略...
}
```
这里使用了 `@TableLogic` 注解,表明该字段用于逻辑删除机制。如果数据库中的字段不是默认命名(如 `is_deleted`),可以通过额外的参数自定义字段名。
#### 自动注入 SqlParser
为了让逻辑删除自动生效,还需要确保 SQL 解析器已经正确加载并应用到拦截器链路当中。可以在项目启动类或者配置类中注册如下代码片段:
```java
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加分页插件或其他必要组件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
```
这样就完成了整个逻辑删除的基础环境搭建工作。
---
阅读全文
相关推荐
















