1.首先自定义注解类
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface PageSolver {
}
2.分页PageInfo类
import java.util.List;
public class Page<T>{
//每页个数
private int pageSize = 15;
//数据集合
private List<T> results ;
//总数
private int total;
//现在页码
private int page = 1;
//分页查询开始位置
private int begin;
//分页查询结束位置
private int end;
private Object paras;
private Object rows;
public Page() {
}
public Page(Integer begin,Integer pageSize){
this.begin = begin;
this.pageSize = pageSize;
this.end = this.begin + this.pageSize;
this.page = (int) Math.floor((this.begin * 1.0d) / this.pageSize) + 1;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
this.end = this.begin + this.pageSize;
if (this.begin != 0) {
this.page = (int) Math.floor((this.begin * 1.0d) / this.pageSize) + 1;
}
}
public List<T> getResults() {
return results;
}
public void setResults(List<T> results) {
this.results = results;
}
public int getTotal() {
if (this.total == 0) {
return 1;
}
return this.total;
}
public void setTotal(int total) {
this.total = total;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
this.begin = (this.page-1) * this.pageSize;
this.end = this.pageSize;
}
public int getBegin() {
return begin;
}
public void setBegin(int begin) {
this.begin = begin;
if (this.pageSize != 0) {
this.page = (int) Math.floor((this.begin * 1.0d) / this.pageSize) + 1;
}
}
public int getEnd() {
if(this.end==0)
this.end = this.pageSize;
return end;
}
public void setEnd(int end) {
this.end = end;
}
public Object getParas() {
return paras;
}
public void setParas(Object paras) {
this.paras = paras;
}
public Object getRows() {
return rows;
}
public void setRows(Object rows) {
this.rows = rows;
}
}
3.在实现HandlerMethodArgumentResolver接口自定参数解析器
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import com.cn.annotation.PageSolver;
import com.cn.base.page.Page;
public class PageArgumentResolver implements HandlerMethodArgumentResolver{
@Override
public boolean supportsParameter(MethodParameter parameter) {
return null != parameter.getParameterAnnotation(PageSolver.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest req = webRequest.getNativeRequest(HttpServletRequest.class);
Page<?> page = new Page<>();
// 页码
if (StringUtils.isNotBlank(req.getParameter("page"))) {
int current = Integer.parseInt(req.getParameter("page"));
page.setPage(current);
}
//页数
if(StringUtils.isNotBlank(req.getParameter("rows"))){
int length = Integer.parseInt(req.getParameter("rows"));
page.setPageSize(length);
}
return page;
}
}
3.在springmvc.xml中添加
<mvc:annotation-driven>
<!-- 自定参数解析器 -->
<mvc:argument-resolvers>
<bean class="com.ymkj.credit.web.api.resolver.PageArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
4.在controller类中使用
@RequestMapping("/list")
@ResponseBody
public Page<User> list(Model model,@PageSolver Page<User> page,User user){
return userService.selectPageByColumn(page, user);
}
5.在service中实现
import com.cn.base.BaseService;
import com.cn.hnust.pojo.User;
public interface UserService extends BaseService<User>{
}
6.在serviceimpl中实现
import org.springframework.stereotype.Service;
import com.cn.base.BaseServiceImpl;
import com.cn.hnust.pojo.User;
import com.cn.hnust.service.UserService;
@Service
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {
}
7.在mapper中实现
import com.cn.base.BaseMapper;
import com.cn.hnust.pojo.User;
/**
* UserMapper
* @author system
* @date 2018-03-30 16:30:38
* @company test
*/
public interface UserMapper extends BaseMapper<User> {
}
8.在BaseService中实现
public interface BaseService<T> {
Page<T> selectPageByColumn(Page<T> page,T column);
List<T> selectAllByColumn(T column);
T selectOneByColumn(T column);
int selectCountByColumn(T column);
int insertByColumn(T column);
int deleteByKeys(String[] keys);
int deleteByColumn(T column);
int updateByColumn(T column);
}
9.在BaseServiceimpl中实现
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.cn.base.page.Page;
public class BaseServiceImpl<T> implements BaseService<T> {
@Autowired
BaseMapper<T> baseMapper;
@Override
public Page<T> selectPageByColumn(Page<T> page, T column) {
int count = baseMapper.selectCountByColumn(column);
if(count > 0){
if (page == null){
page = new Page<T>();
}else{
if (page.getPage() * page.getPageSize() > count && Math.ceil(Double.valueOf(count) / Double.valueOf(page.getPageSize())) != page.getPage()) {
page.setPage(1);
}
}
page.setTotal(count);
page.setRows(baseMapper.selectPageByColumn(page, column));
page.setParas(column);
return page;
}
return null;
}
@Override
public List<T> selectAllByColumn(T column) {
return baseMapper.selectAllByColumn(column);
}
@Override
public T selectOneByColumn(T column) {
return baseMapper.selectOneByColumn(column);
}
@Override
public int selectCountByColumn(T column) {
return baseMapper.selectCountByColumn(column);
}
@Override
public int insertByColumn(T column) {
return baseMapper.insertByColumn(column);
}
@Override
public int deleteByKeys(String[] keys) {
return baseMapper.deleteByKeys(keys);
}
@Override
public int deleteByColumn(T column) {
return baseMapper.deleteByColumn(column);
}
@Override
public int updateByColumn(T column) {
return baseMapper.deleteByColumn(column);
}
}
10.在Basemaper中实现
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.cn.base.page.Page;
public interface BaseMapper<T>{
List<T> selectPageByColumn(@Param("page")Page<T> page, @Param("column")Object column);
List<T> selectAllByColumn(@Param("column")T column);
T selectOneByColumn(@Param("column")T column);
int selectCountByColumn(@Param("column")T column);
int insertByColumn(T column);
int deleteByKeys(String[] keys);
int deleteByColumn(@Param("column")T column);
int updateByColumn(T column);
}