Spring 自定义注解分页实现

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);
}

 

转载于:https://my.oschina.net/lisc2016/blog/2933819

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值