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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章