mybaitsplus进阶
时间: 2025-03-20 17:10:50 浏览: 30
### MyBatis-Plus 的高级用法
#### 逻辑删除
MyBatis-Plus 提供了逻辑删除的功能,允许开发者通过配置实现软删除机制。这意味着当一条记录被标记为“已删除”,实际上只是更新了一个标志位而不是物理上从数据库中移除该记录[^1]。
启用逻辑删除需要在 `application.yml` 或者 `application.properties` 文件中进行如下配置:
```yaml
mybatis-plus:
global-config:
db-config:
logic-delete-value: 1 # 表示逻辑删除后的值
logic-not-delete-value: 0 # 表示未删除的值
```
同时,在实体类中标记对应的字段作为逻辑删除字段:
```java
import com.baomidou.mybatisplus.annotation.TableLogic;
public class User {
@TableLogic
private Integer deleted;
}
```
调用删除接口时会自动转换成 SQL 更新语句而非 DELETE 操作。
---
#### 条件构造器中的 `lt` 方法
`lt` 是 MyBatis-Plus 中用于构建小于条件的方法之一,支持多种 Wrapper 类型(如 `QueryWrapper`, `LambdaQueryWrapper` 等)。其作用是设置某个字段的小于约束条件[^2]。
以下是使用 `lt` 构造查询的一个简单例子:
```java
@Test
void testLt() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", 30);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
```
如果需要增加条件判断,则可以传入布尔参数来控制是否生效:
```java
queryWrapper.lt(hasCondition(), "age", 30);
boolean hasCondition() { return true; }
```
---
#### 自动填充功能
为了减少重复代码量并提升效率,MyBatis-Plus 支持公共字段的自动填充特性。这通常应用于创建时间 (`create_time`) 和修改时间 (`update_time`) 字段[^3]。
要实现这一功能,需先定义一个处理器类继承自 `MetaObjectHandler` 接口,并重写相应方法:
```java
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
```
接着,在实体类中添加注解即可触发此行为:
```java
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
```
---
#### 分页查询
分页查询是处理大数据集的重要手段,MyBatis-Plus 对此提供了简洁的支持[^4]。只需引入分页插件并将其实例化到 Spring 容器中即可完成初始化工作。
下面是一个完整的分页测试案例:
```java
@Autowired
private EmployeeService employeeService;
@Test
void testPage() {
Page<Employee> page = new Page<>(1, 10); // 当前页码和每页大小
IPage<Employee> result = employeeService.page(page);
System.out.println("总记录数:" + result.getTotal());
System.out.println("当前页数据数量:" + result.getRecords().size());
}
```
注意:实际项目中可能还需要额外配置拦截器以适配具体需求。
---
#### 批量删除与批量查询
对于涉及多个 ID 的操作场景,MyBatis-Plus 同样给出了便捷方案——即通过 `deleteBatchIds()` 实现一次性的多条记录删除动作;而针对读取部分则可借助 `selectBatchIds()` 达成相同目的[^5]。
批量删除实例展示如下:
```java
@Test
void testDeleteBatch() {
List<Long> ids = Arrays.asList(1L, 2L, 3L);
boolean success = userDao.deleteBatchIds(ids);
Assert.assertTrue(success);
}
// 批量查询对应版本
@Test
void testSelectBatch() {
List<Long> ids = Arrays.asList(1L, 2L, 3L);
List<User> userList = userDao.selectBatchIds(ids);
assertNotNull(userList);
}
```
以上便是围绕 MyBatis-Plus 高级特性的若干核心知识点解析及其实践指导。
阅读全文
相关推荐
















