今天写一下开发过程中都会遇到的分页查询问题,之前我弄的分页查询都是自己写一个分页逻辑的,感觉很麻烦也很复杂,最后还是觉得Mybatis的分页插件简单好用,话不多说直接上代码:
pom文件依赖:
<!-- mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- 分页查询插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
写一个通用的分页数据响应类PageResponseDto
import lombok.Data;
import java.util.List;
@Data
public class PageResponseDto<T> {
private Integer size;
private Integer page;
private Long total;
private List<T> result;
}
service业务类:
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hengtong.led.dto.PageResponseDto;
import com.hengtong.led.entity.User;
import com.hengtong.led.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
/**
* 分页查询插件
* */
public PageResponseDto<User> getUserByPage(Integer pageNum, Integer limit){
PageHelper.startPage(pageNum, limit);
List<User> userList = userMapper.getAll();
PageInfo<User> info = new PageInfo<>(userList);
PageResponseDto<User> response = new PageResponseDto<>();
response.setPage(info.getPageNum());
response.setTotal(info.getTotal());
response.setSize(info.getSize());
response.setResult(info.getList());
return response;
}
}
注意一个PageHelper.startPage()后面接上你的查询,网上很多老哥在中间做了点其他事情之后,没分到页
mapper方法:
@Select("select * from user")
List<User> getAll();
写个controller,在里面顶一个接口:
import com.hengtong.led.dto.PageResponseDto;
import com.hengtong.led.entity.User;
import com.hengtong.led.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/page")
@ResponseBody
public PageResponseDto<User> getByPage(Integer page, Integer limit){
return userService.getUserByPage(page, limit);
}
}
把项目跑起来,然后去postman调用下:
返回的数据格式如下: