PageHelper實現

添加依賴:

<!-- pagehelper分頁模塊 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>

 pagehelper配置:

#分頁插件配置
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql
    returnPageInfo: check

 代碼實現:

 PageHelper.startPage(pageNum, pageSize);
 List<User> user= dpmMapper.queryUserList();
 Page<User> dpmPage = PageUtils.page(user);

 

public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
        Page<E> page = new Page(pageNum, pageSize, count);
        page.setReasonable(reasonable);
        page.setPageSizeZero(pageSizeZero);
        Page<E> oldPage = getLocalPage();
        if (oldPage != null && oldPage.isOrderByOnly()) {
            page.setOrderBy(oldPage.getOrderBy());
        }

        setLocalPage(page);
        return page;
    }
public T get() {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null) {
                @SuppressWarnings("unchecked")
                T result = (T)e.value;
                return result;
            }
        }
        return setInitialValue();
    }

 

 PageHelper將參數保存到page對象中,接着將page的副本存放入ThreadLoacl中,這樣可以保證分頁的時候,參數互不影響,接着利用了mybatis提供的攔截器,取得ThreadLocal的值,重新拼裝分頁SQL,完成分頁

public class PageUtils<T> implements Serializable {
	private static final long serialVersionUID = 7381468955316253104L;

	public static <T> Page<T> page(List<T> list){
		Page<T> page = new Page<T>(list);
		return page;
	}
}
public class Page<T> implements Serializable {
	
	private static final long serialVersionUID = 6094186219831724663L;
	private List<T> content = new ArrayList<>(); //對象記錄結果集
	private long totalPages = 0;  //總頁數
	private long totalElements; //總記錄數
	private int number;  //當前頁
	private int size; //每頁顯示記錄數
	private int numberOfElements; //每頁顯示實際記錄數

	public Page(List<T> temp) {
		com.github.pagehelper.Page<T> result = (com.github.pagehelper.Page<T>) temp;
		if(result != null && result.size() > 0){
			this.content = result.getResult();
			this.totalPages = result.getPages();
			this.totalElements = result.getTotal();
			this.number = result.getPageNum();
			this.size = result.getPageSize();
			this.numberOfElements = this.content.size();
		}
	}
	public Page() {
		super();
	}
}

 

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