第二章 一款简单实用的分页功能
文章目录
前言
话不多说,直接上代码
一、分页功能?
很实用,开发几乎不可避免用到
二、使用步骤
1. BaseDto
代码如下(示例):
import java.io.Serializable;
import java.util.List;
public class BaseDto implements Serializable {
private static final long serialVersionUID = 1L;
private String logId;
private String globalUserCode;
private String servletPath;
private String powerSystemCode;
private String powerCondition;
private List operationDtos;
public BaseDto() {
}
public String getPowerCondition() {
return this.powerCondition;
}
public String getServletPath() {
return this.servletPath;
}
public void setServletPath(String servletPath) {
this.servletPath = servletPath;
}
public String getPowerSystemCode() {
return this.powerSystemCode;
}
public void setPowerSystemCode(String powerSystemCode) {
this.powerSystemCode = powerSystemCode;
}
public void setPowerCondition(String powerCondition) {
this.powerCondition = powerCondition;
}
public String getGlobalUserCode() {
return this.globalUserCode;
}
public void setGlobalUserCode(String globalUserCode) {
this.globalUserCode = globalUserCode;
}
public String getLogId() {
return this.logId;
}
public void setLogId(String logId) {
this.logId = logId;
}
public List getOperationDtos() {
return this.operationDtos;
}
public void setOperationDtos(List operationDtos) {
this.operationDtos = operationDtos;
}
public void setBaseDto(BaseDto baseDto) {
this.setGlobalUserCode(baseDto.getGlobalUserCode());
this.setServletPath(baseDto.getServletPath());
this.setPowerSystemCode(baseDto.getPowerSystemCode());
this.setLogId(baseDto.getLogId());
}
}
2.ResponseDto
代码如下(示例):
import java.io.Serializable;
import java.lang.reflect.Method;
public class ResponseDto extends BaseDto implements Serializable {
private static final long serialVersionUID = 1L;
private String resultCode;
private String resultMsg;
private Object resultObj;
public static ResponseDto instance(Object resultObj) {
return new ResponseDto(resultObj);
}
public static ResponseDto instance(Object resultObj, boolean flag) {
ResponseDto responseDto = new ResponseDto(resultObj);
Method method1 = null;
Method method2 = null;
try {
method1 = resultObj.getClass().getMethod("getResultCode");
method2 = resultObj.getClass().getMethod("getResultMsg");
} catch (Exception var7) {
}
try {
if (null != method1) {
responseDto.setResultCode((String)method1.invoke(resultObj));
}
if (null != method2) {
responseDto.setResultMsg((String)method2.invoke(resultObj));
}
} catch (Exception var6) {
}
return responseDto;
}
private ResponseDto(Object resultObj) {
this.resultCode = "0000";
this.resultMsg = "成功";
this.resultObj = resultObj;
}
public ResponseDto() {
}
public ResponseDto(String resultCode, String resultMsg, Object resultObj) {
this.resultCode = resultCode;
this.resultMsg = resultMsg;
this.resultObj = resultObj;
}
public String getResultCode() {
return this.resultCode;
}
public void setResultCode(String resultCode) {
this.resultCode = resultCode;
}
public String getResultMsg() {
return this.resultMsg;
}
public void setResultMsg(String resultMsg) {
this.resultMsg = resultMsg;
}
public Object getResultObj() {
return this.resultObj;
}
public void setResultObj(Object resultObj) {
this.resultObj = resultObj;
}
}
3.PageInfo
代码如下(示例):
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class PageInfo<T> extends ResponseDto implements Serializable {
private static final long serialVersionUID = 1L;
public static final int DEFAULT_PAGE_SIZE = 10;
private int pageNum = 1;
private int pageSize;
private int startRow;
private List<T> list = new ArrayList();
private long totalCount;
private int pages;
public PageInfo() {
}
public int getPageNum() {
return this.pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return this.pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getStartRow() {
return this.startRow;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public List<T> getList() {
return this.list;
}
public void setList(List<T> list) {
this.list = list;
}
public long getTotalCount() {
return this.totalCount;
}
public void setTotalCount(long totalCount) {
this.totalCount = totalCount;
}
public int getPages() {
return this.pages;
}
public void setPages(int pages) {
this.pages = pages;
}
}
4.查询对象UserDto
代码如下(示例):
import lombok.Data;
/**
* @author jingyikang
* @date 2020/11/30 18:10
* @description //TODO ProposalAgentBO类
*/
@Data
public class UserDto{
private String code;
private String name;
private String age;
private String sex;
}
5.Controller
代码如下(示例):
@RestController
@RequestMapping("/user")
public class userController {
//根据条件查询用户信息
@RequestMapping(value = "/queryUserList", method = RequestMethod.POST)
@ResponseBody
public ResponseDto queryUserList(@RequestBody UserDto userDto , HttpServletRequest request){
PageInfo<UserDto > pageInfo = checklistService.selectUserService(orderMainDO);
return ResponseDto.instance(pageInfo);
}
}
6.省略接口直接ServiceImpl
代码如下(示例):
@Slf4j
@Service("mainService")
@Path(value = "user")
public class MainServiceImpl implements MainService {
@Resource
private MainMapper mapper;
@Override
public PageInfo<UserDto > selectUserService(UserDto dto) {
// 创建分页查询对象(匿名内部类),实现查询/对象转换方法
AbstractPageQuery<UserDto ,UserDto > query =new AbstractPageQuery<UserDto , UserDto >() {
@Override
protected List<UserDto > doQueryPage(UserDto userDto ) {
return mapper.selectUser(userDto );
}
@Override
protected UserDto beanConvert(Object src) { return (UserDto ) src;}
};
PageInfo<UserDto > pageInfoRes;
try {
// 查询结果
pageInfoRes = query.queryPage(dto);
pageInfoRes.setResultCode("00000");
pageInfoRes.setResultMsg("查询成功");
} catch (Exception e) {
throw new ShieException("查询用户发生异常!", e);
}
return pageInfoRes;
}
}
6.1 附上AbstractPageQuery类
代码如下(示例):
import java.io.Serializable;
public class BaseQueryConditionDto extends BaseDto implements Serializable {
private static final long serialVersionUID = 1L;
private int pageNo;
private int pageSize;
private String orderByClause;
public BaseQueryConditionDto() {
}
public int getPageNo() {
return this.pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return this.pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String getOrderByClause() {
return this.orderByClause;
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
}
import com.github.pagehelper.PageHelper;
import com.shie.framework.dto.BaseQueryConditionDto;
import com.shie.framework.dto.PageInfo;
import java.util.List;
public abstract class AbstractPageQuery<T extends BaseQueryConditionDto, P> {
public AbstractPageQuery() {
}
public PageInfo<P> queryPage(T condition) {
Integer pageNo = condition.getPageNo();
Integer pageSize = condition.getPageSize();
pageNo = pageNo != null && pageNo != 0 ? pageNo : 1;
pageSize = pageSize != null && pageSize != 0 ? pageSize : 10;
PageHelper.startPage(pageNo, pageSize);
com.github.pagehelper.PageInfo helperPage = new com.github.pagehelper.PageInfo(this.doQueryPage(condition));
PageInfo<P> page = new PageInfo();
page.setTotalCount(helperPage.getTotal());
page.setPageNum(helperPage.getPageNum());
for(int i = 0; i < helperPage.getList().size(); ++i) {
page.getList().add(this.beanConvert(helperPage.getList().get(i)));
}
helperPage = null;
return page;
}
protected abstract List doQueryPage(T var1);
protected abstract P beanConvert(Object var1);
}
sql正常查询,会自动拦截添加limit。