标签:Java pageSize int PageHelper return startPage MyBatis pageNum Page
∵ 很容易忘记PageHelper的使用,以及使用方法很奇怪。∴下定决心记住以及弄清楚其背后的原理
先上代码,很简单的分页查询
public ServerResponse<PageInfo> getProductList(int pageNumber, int pageSize){
/**
* 1.pageHelper.startPage
* 2.sql查询逻辑
* 3.处理查询到的结果(进行结果筛选->vo对象)
* 4.pageHelper收尾(aop)
*/
//debug时传入pageNumber为1;pageSize为10
PageHelper.startPage(pageNumber, pageSize);
List<Product> productList = productmMapper.selectList();
List<ProductListVo> productListVoList = Lists.newArrayList();
for(Product product : productList){
ProductListVo productListVo = assembleProductListVo(product);
productListVoList.add(productListVo);
}
//先用默认的结果
PageInfo pageResult = new PageInfo(productList);
//传给前端的用筛选后结果
pageResult.setList(productListVoList);
return ServerResponse.createBySuccess(pageResult);
}
①Page.startPage(int pageNum, int pageSize)
public static <E> Page<E> startPage(int pageNum, int pageSize) {
//默认传入的count为true
return startPage(pageNum, pageSize, true);
}
public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count) {
//默认传入的reasonable为null
return startPage(pageNum, pageSize, count, (Boolean)null);
}
public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable) {
//默认传入的pageSizeZero为null
return startPage(pageNum, pageSize, count, reasonable, (Boolean)null);
}
当前的参数数据
可以看到,基本都是在增加一些参数的默认值
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 = SqlUtil.getLocalPage();
if (oldPage != null && oldPage.isOrderByOnly()) {
page.setOrderBy(oldPage.getOrderBy());
}
SqlUtil.setLocalPage(page);
return page;
}
真正开始存储参数的值到Page类中
计算从第几行开始、第几行结束存储到Page的属性中
又回到startPage(),再次设置了一次reasonable;还设置了PageSizeZero
后面几步是尝试从线程的共享变量中(不同线程之间无法共享,自己和自己共享)尝试设置以前Page的OrderBy的值
private static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal();
public static <T> Page<T> getLocalPage() {
return (Page)LOCAL_PAGE.get();
}
通过当前线程来获取对应的ThreadLocalMap(也就是每个线程自己所对应的变量表、副本之类的东西)
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();
}
ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}
后续待更
标签:Java,pageSize,int,PageHelper,return,startPage,MyBatis,pageNum,Page 来源: https://blog.csdn.net/TypantK/article/details/94437198
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。