PageHelper.startPage是MyBatis分页插件PageHelper中的一个静态方法。这个方法用来设置分页参数并进行分页查询。它可以在MyBatis的查询方法之前调用,设置需要分页的页码和每页的记录数。在调用PageHelper.startPage之后,MyBatis会自动进行分页查询并返回分页结果。
#添加pagehelper配置
pagehelper:
helperDialect: mysql
reasonable: false
supportMethodsArguments: true
params: count=countSql
reasonable可以理解为是否开启自动优化默认为false,如果为true当查询的页码无数据时就会返回离输入的页码最近含数据的页码数据(最后一个有数据的页码数据或者第一页的数据)。如果设置为false当查询的页码无数据时就直接返回空了
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("/member/manager")
@Api(value = "/member/manager", tags = "会员管理")
public class MemberController {
private final MemberService memberService ;
@ApiOperation("会员分页列表")
@PostMapping("/queryPage")
public BaseResult<PageResult<MemberPageVO>> selectMemberPageList(@RequestBody MemberReq req) {
return BaseResult.defaultSuccess(memberService.queryAllPage(req));
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.business.mapper.MemberMapper">
<select id="queryAllPage"
resultType="com.test.domain.vo.MemberPageVO">
SELECT
t1.id,
t1.user_name,
t1.level,
t1.registrationDate
FROM
t_batch_inquiry_policy t1
WHERE t1.del_flag = 0
<if test="name != null and name != ''">
AND t1.user_name like CONCAT('%',#{name,jdbcType=VARCHAR},'%')
</if>
<if test="levelList != null and levelList.size() > 0">
AND t1.level IN
<foreach collection="levelList" separator="," open="(" close=")" item="level">
#{level,jdbcType=TINYINT}
</foreach>
</if>
<if test="registrationStartDate != null ">
AND t1.registrationDate <![CDATA[ >= ]]> #{registrationStartDate ,jdbcType=TIMESTAMP}
</if>
<if test="registrationEndDate != null">
AND t1.registrationDate <![CDATA[ <= ]]> #{registrationEndDate ,jdbcType=TIMESTAMP}
</if>
ORDER BY
t1.registrationDate DESC
</select>
</mapper>
@Mapper
public interface MemberMapper extends BaseMapper<MemberPO> {
List<MemberPageVO> queryAllPage(MemberReq req);
}
public interface MemberService extends IService<MemberPO> {
PageResult<MemberPageVO> queryAllPage(MemberReq req);
}
@Slf4j
@Service
@AllArgsConstructor
public class MemberServiceImpl extends ServiceImpl<MemberMapper, MemberPO> implements MemberService {
@Override
public PageResult<MemberPageVO> queryAllPage(MemberReq req) {
Page<MemberPageVO> page = PageMethod.startPage(req.getPageNumber(), req.getPageSize());
super.baseMapper.queryAllPage(req);
return PageResult.builder(page);
}
}
下面是两个通用结果类
public class PageResult<T> {
/**
* 页码
*/
private int pageNumber;
/**
* 分页大小
*/
private int pageSize;
/**
* 总记录数
*/
private long total;
/**
* 查询数据
*/
private List<T> records;
public PageResult(List<T> records) {
this(0, records);
}
public PageResult(long total, List<T> records) {
this(0, total, records);
}
public PageResult(int pageSize, long total, List<T> records) {
this(0, pageSize, total, records);
}
public PageResult(Page<T> page) {
new PageResult<>(page.getPageNum(), page.getPageSize(), page.getTotal(), page.getResult());
}
public PageResult(int pageNum, int pageSize, long total, List<T> records) {
new PageResult<>(pageNum, pageSize, total, records);
}
public static <T> PageResult<T> builder(Page<T> page) {
return new PageResult<>(page);
}
public static <T> PageResult<T> builder(int pageNum, int pageSize, long total, List<T> records) {
return new PageResult<>(pageNum, pageSize, total, records);
}
}
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class BaseResult<T> implements Serializable {
private static final long serialVersionUID = -3192682641390103439L;
/**
* 响应码
*/
private String code;
/**
* 提示信息
*/
private String msg;
/**
* 业务数据
*/
private T data;
public static <T> BaseResult<T> defaultFailure() {
return new BaseResult<>(ErrorCodeEnum.UNKNOWN_ERROR.getCode(), ErrorCodeEnum.UNKNOWN_ERROR.getDesc(), null);
}
public static <T> BaseResult<T> defaultFailure(ErrorCodeEnum errorCode) {
return new BaseResult<>(errorCode.getCode(), errorCode.getDesc(), null);
}
public static <T> BaseResult<T> defaultFailure(T data) {
return new BaseResult<>(ErrorCodeEnum.UNKNOWN_ERROR.getCode(), ErrorCodeEnum.UNKNOWN_ERROR.getDesc(), data);
}
public static <T> BaseResult<T> defaultFailure(String msg) {
return new BaseResult<>(ErrorCodeEnum.UNKNOWN_ERROR.getCode(), msg, null);
}
public static <T> BaseResult<T> defaultFailure(String code, String msg) {
return new BaseResult<>(code, msg, null);
}
public static <T> BaseResult<T> defaultFailure(String msg, T data) {
return new BaseResult<>(ErrorCodeEnum.UNKNOWN_ERROR.getCode(), msg, data);
}
public static <T> BaseResult<T> defaultFailure(ErrorCodeEnum errorCode, T data) {
return new BaseResult<>(errorCode.getCode(), errorCode.getDesc(), data);
}
public static <T> BaseResult<T> defaultSuccess() {
return BaseResult.defaultSuccess(null);
}
public static <T> BaseResult<T> defaultSuccess(T data) {
return new BaseResult<>(ErrorCodeEnum.SUCCESS.getCode(), ErrorCodeEnum.SUCCESS.getDesc(), data);
}
public static <T> BaseResult<T> defaultSuccess(String msg, T data) {
return new BaseResult<>(ErrorCodeEnum.SUCCESS.getCode(), msg, data);
}
public static <T> BaseResult<T> defaultSuccess(ErrorCodeEnum errorCode, T data) {
return new BaseResult<>(errorCode.getCode(), errorCode.getDesc(), data);
}
public boolean isSuccess() {
return ErrorCodeEnum.SUCCESS.getCode().equals(code);
}
public static <String> BaseResult<String> defaultSuccessWithDataStr(String data) {
return new BaseResult<>(ErrorCodeEnum.SUCCESS.getCode(), null, data);
}
}