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