MybaitsPlus
时间: 2024-04-25 10:25:47 浏览: 149
MyBatis-Plus是一个基于MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,简化了开发,提高了效率。MyBatis-Plus提供了许多实用的工具类和增强功能,例如通用Mapper、分页插件、性能分析插件、代码生成器等,可以帮助我们更加方便快捷地进行开发。
MyBatis-Plus主要提供了以下几个模块:
- MyBatis-Plus核心模块:包括通用Mapper、Wrapper、分页插件等功能。
- MyBatis-Plus代码生成器:可以根据数据库表生成基础的CRUD代码。
- MyBatis-Plus性能分析插件:可以帮助我们分析SQL执行的性能问题。
- MyBatis-Plus缓存模块:支持多种缓存类型,包括Ehcache、Redis等。
- MyBatis-Plus动态数据源模块:可以根据不同的数据源进行动态切换。
使用MyBatis-Plus可以简化我们的开发流程,减少编写重复代码的时间。通用Mapper模块可以帮助我们快速构建基础的CRUD操作,Wrapper模块则可以帮助我们更加灵活地构建复杂的查询条件。性能分析插件可以帮助我们定位SQL执行的性能问题,缓存模块可以帮助我们提高查询效率。同时,MyBatis-Plus还提供了丰富的文档和示例,方便我们学习和使用。
相关问题
mybaitsplus 分页
Mybatis-plus提供了一种通过拦截器实现分页的方法。你可以创建一个MybatisConfig配置类,在该类中使用MybatisPlusInterceptor拦截器,并添加PaginationInnerInterceptor分页拦截器。这个分页拦截器可以根据你的数据库类型(如MYSQL)进行配置。
具体步骤如下:
1. 创建一个MybatisConfig配置类,并加上@Configuration注解。
2. 在该配置类中创建一个名为mybatisPlusInterceptor的Bean方法,并返回一个MybatisPlusInterceptor对象。
3. 在mybatisPlusInterceptor方法中,创建一个MybatisPlusInterceptor对象,并调用addInnerInterceptor方法来添加一个PaginationInnerInterceptor分页拦截器,并传入数据库类型(如DbType.MYSQL)。
4. 在你的接口中进行测试时,可以使用Lambda表达式进行分页查询操作。
5. 创建一个Page对象,指定当前页码和每页显示的记录数。
6. 使用LambdaQueryChainWrapper来构建查询条件,并通过page方法进行分页查询。
7. 最后将查询结果封装成Response对象返回。
以上是使用Mybatis-plus实现分页的方法。你可以根据需要进行相应的配置和调整。
mybaitsplus进阶
### 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 高级特性的若干核心知识点解析及其实践指导。
阅读全文
相关推荐













