mybatisplus代码自动生成 生成条件分页查询
时间: 2025-05-09 16:40:28 浏览: 21
<think>好的,用户想使用MyBatisPlus生成包含条件分页查询的代码。我需要先回忆MyBatisPlus的相关知识,并结合用户提供的引用内容来组织答案。
首先,用户提到的引用[2]和[3]中提到了MyBatisPlus的配置、代码生成和分页查询。尤其是引用[2]详细说明了如何配置分页插件和自动生成代码的步骤,这可能对用户有帮助。
接下来,我需要分步骤说明如何实现条件分页查询。首先应该配置分页插件,这是必须的步骤,否则分页功能无法生效。然后,自动生成代码的部分需要使用MyBatisPlus的代码生成器,这里可能需要添加相关依赖,比如mybatis-plus-generator和模板引擎如velocity。
然后,在编写Service层时,需要利用生成的Mapper和分页参数IPage,结合条件构造器QueryWrapper来构建查询条件。这里需要示范如何构造查询条件,比如根据DTO中的字段动态添加条件。
最后,用户可能需要一个Controller层的示例,使用Post请求接收DTO参数并调用Service方法。引用[1]中的示例代码展示了如何编写Controller的方法,可以借鉴这个结构。
同时,用户可能需要了解如何测试这个接口,比如使用Postman传递JSON参数。此外,可能还需要提到分页查询的优化,比如索引的使用,或者MyBatisPlus的其他高级功能。
需要确保回答结构清晰,步骤明确,代码示例正确,并且符合用户的实际需求。可能还需要提醒用户注意依赖版本和配置文件的正确性,避免常见错误。</think>以下是使用MyBatisPlus实现条件分页查询代码生成的完整步骤:
### 一、配置分页插件(关键前置条件)
在SpringBoot配置类中添加分页插件拦截器:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
```
*该配置使MyBatisPlus支持物理分页而非内存分页[^2]*
### 二、自动生成基础代码
1. 添加依赖(pom.xml):
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
```
2. 创建代码生成器类:
```java
public class CodeGenerator {
public static void main(String[] args) {
AutoGenerator generator = new AutoGenerator();
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/test");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
generator.setDataSource(dsc);
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
gc.setAuthor("yourname");
gc.setOpen(false);
generator.setGlobalConfig(gc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example");
generator.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude("task"); // 指定生成表
generator.setStrategy(strategy);
generator.execute();
}
}
```
*生成后将包含Entity、Mapper、Service、Controller等基础层代码[^3]*
### 三、实现条件分页查询
1. Service层实现:
```java
public interface TaskService extends IService<Task> {
IPage<Task> findByCondition(TaskDTO dto);
}
@Service
public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements TaskService {
@Override
public IPage<Task> findByCondition(TaskDTO dto) {
QueryWrapper<Task> wrapper = new QueryWrapper<>();
// 动态条件构造
if (StringUtils.isNotBlank(dto.getTaskName())) {
wrapper.like("task_name", dto.getTaskName());
}
if (dto.getStatus() != null) {
wrapper.eq("status", dto.getStatus());
}
if (dto.getStartTime() != null) {
wrapper.ge("create_time", dto.getStartTime());
}
// 分页参数
Page<Task> page = new Page<>(dto.getPageNum(), dto.getPageSize());
return baseMapper.selectPage(page, wrapper);
}
}
```
2. Controller层示例:
```java
@RestController
@RequestMapping("/task")
public class TaskController {
@Autowired
private TaskService taskService;
@PostMapping("/page")
public R<IPage<Task>> findByCondition(@RequestBody TaskDTO dto) {
return R.ok(taskService.findByCondition(dto));
}
}
```
### 四、请求参数示例(JSON)
```json
{
"pageNum": 1,
"pageSize": 10,
"taskName": "紧急",
"status": 1,
"startTime": "2023-01-01"
}
```
阅读全文
相关推荐


















