public interface PageSortInterface { Integer getPageNum(); Integer getPageSize(); String getSort(); String getOrder(); } public interface MyBaseMapper<T> extends Mapper<T>, MySqlMapper<T>,MyInsertListMapper<T> { } public interface UserMapper extends MyBaseMapper<User> { } springboot项目在有这三个接口的情况下,实现在sql层的分页(使用PageHelper 方式)
时间: 2024-03-16 12:43:13 浏览: 60
好的,以下是一个示例代码,演示如何在Spring Boot项目中使用`PageHelper`实现在SQL层面的分页:
首先,需要在`pom.xml`中添加`pagehelper`依赖:
```xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
```
然后,在`application.properties`中添加相应的配置:
```properties
# 分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
```
接下来,定义一个`Page`类,用于封装分页参数和查询结果:
```java
public class Page<T> {
private List<T> content; // 数据列表
private long total; // 总记录数
private int pageNum; // 当前页码
private int pageSize; // 每页记录数
private String sort; // 排序字段
private String order; // 排序方式
// getter和setter方法
}
```
然后,定义一个`PageHelperUtil`工具类,用于调用`PageHelper`进行分页查询:
```java
public class PageHelperUtil {
public static <T> Page<T> startPage(PageSortInterface pageSort, Supplier<List<T>> supplier) {
PageHelper.startPage(pageSort.getPageNum(), pageSort.getPageSize(), pageSort.getSort() + " " + pageSort.getOrder());
List<T> list = supplier.get();
PageInfo<T> pageInfo = new PageInfo<>(list);
Page<T> page = new Page<>();
page.setContent(list);
page.setTotal(pageInfo.getTotal());
page.setPageNum(pageInfo.getPageNum());
page.setPageSize(pageInfo.getPageSize());
page.setSort(pageSort.getSort());
page.setOrder(pageSort.getOrder());
return page;
}
}
```
在`startPage`方法中,我们调用`PageHelper.startPage`方法,指定当前页码、每页记录数和排序方式,并使用`Supplier`接口作为入参,接收一个查询结果的lambda表达式。然后,将查询结果封装为`Page`对象,包含数据列表、总记录数、当前页码、每页记录数、排序字段和排序方式。
最后,在`UserMapper`接口中定义一个`selectByRoleAndPage`方法,接收一个`PageSortInterface`类型的参数,并返回一个`List<User>`类型的结果:
```java
public interface UserMapper extends MyBaseMapper<User> {
@SelectProvider(type = MySelectProvider.class, method = "dynamicSQL")
List<User> selectByRoleAndPage(PageSortInterface pageSort);
}
```
在`selectByRoleAndPage`方法中,我们调用`MySelectProvider.dynamicSQL`方法生成查询语句,并将`PageSortInterface`类型的参数作为入参传递给`PageHelperUtil.startPage`方法,实现分页查询。最终返回一个`List<User>`类型的结果。
使用示例如下:
```java
@RequestMapping("/users")
public Page<User> getUsers(@RequestParam int role, @RequestParam int pageNum, @RequestParam int pageSize, @RequestParam String sort, @RequestParam String order) {
PageSortInterface pageSort = new PageSortImpl(pageNum, pageSize, sort, order);
return PageHelperUtil.startPage(pageSort, () -> userMapper.selectByRoleAndPage(pageSort));
}
```
在`getUsers`方法中,我们接收请求参数,创建一个`PageSortImpl`对象,实现`PageSortInterface`接口。然后,调用`PageHelperUtil.startPage`方法,传入`PageSortInterface`类型的参数和一个lambda表达式,获取分页查询结果。
阅读全文