使用jpa实现分页查询

1,859 阅读1分钟

1.定义一个返回类PageUtil

public class PageUtil {
/**
 * 每页大小
 */
private int pageSize;
/**
 * 当前页为第几页
 */
private int number;
/**
 * 总共有多少页
 */
private int totalPages;
/**
 * 总共有多少条数据
 */
private int totalElements;
/**
 * 数据
 */
private List content = new ArrayList();
}

2.定义一个Specification

## 这里我是在UserQuery里写的一个组装的方法
public class UserQuery extends BaseQuery {
    private Integer page;
    private Integer size;
    private String name;

    @Override
    public Specification createSpec() {
        Specification<TUser> systemdictionarydetail = Specifications.<TUser>or()
                .like(StringUtil.isNotBlank(name),"unit", "%" + name + "%")
                .like(StringUtil.isNotBlank(name),"name", "%" + name + "%")
                .like(StringUtil.isNotBlank(name),"phone", "%" + name + "%")
                这里要注意 unit,name,phone要和实体类的对应,而不是和数据库字段一致
                ......
                .build();
        return systemdictionarydetail;
    }

3.使用接口方法

        //拿到查询规则
        Specification spec = userQuery.createSpec();
        //传入分页条件和排序条件拿到分页对象
        Pageable pageable = PageRequest.of(page - 1, size, Sort.Direction.DESC, "createTime");
        Page<TUser> datas = userRepository.findAll(spec, pageable);
        ......
        //封装到pageUtil
        pageUtil.setContent(datas.getContent());
        pageUtil.setTotalPages(datas.getTotalPages());
        pageUtil.setTotalElements((int) datas.getTotalElements());
        pageUtil.setNumber(datas.getNumber() + 1);