MyBatis_02_Page&PageInfo

转载自:
附加:PageHelper分页插件的:Page和PageInfo的区别

说明:

(1)为什么写本篇博客?:

          ● 在【Spring Boot电商项目29:商品分类模块八:后台的【分类列表(平铺)】接口;】中,实现分页功能时,使用到了PageHelper分页插件;

          ● 但是,在【Spring Boot电商项目29:商品分类模块八:后台的【分类列表(平铺)】接口;】中,我们使用的是PageHelper中的PageInfo对象;

          ● 而,在【MyBatis进阶五:PageHelper分页插件;】中,我们第一次遇到PageHelper时候,使用的是PageHelper中的Page对象;

          ● 所以,本篇博客,就分析一下:PageHelper分页插件中的:Page和PageInfo的区别;

(2)本篇博客参考的博客有:

          ● 【Page和PageInfo】,该文的作者是【程序员^晓洋】;

目录

一:Page和PageInfo;(这儿,归纳了两个对象的属性,总结的不错;)

1. Page和PageInfo简介;

2.Page和PageInfo,具体属性分析;

二:Page和PageInfo:源码;(这部分,仅供参考,爱看不看)

1.Page源码;

2.PageInfo源码;

三:Page和PageInfo:使用;(重要!)

(1)首先,就是开启分页,设置【pageNum:当前页】和【pageSize:每页记录数】;

 (2)然后,我们会利用Mybatis,根据上面设置的分页条件,去查询数据库,得到查询结果;

(3)然后,可以根据前端对分页数据格式的要求,可以把(3)中查到的分页数据,包装成Page对象;

(4)或者,包装成PageInfo对象;

(5)使用Page对象还是使用PageInfo对象?


一:Page和PageInfo;(这儿,归纳了两个对象的属性,总结的不错;)

这儿的内容,完全照抄自【Page和PageInfo】,该文的作者是【程序员^晓洋】;

1. Page和PageInfo简介;

两者都能获取到数据,

Page是一个ArrayListList。

PageInfo是一个对象,能获取到的数据比Page多;

2.Page和PageInfo,具体属性分析;

Page对象:


     
     
  1. private int pageNum; //当前页码
  2. private int pageSize; //每页数据的数量
  3. private int startRow; //始页首行行号
  4. private int endRow; //尾页尾行行号
  5. private long total; //总记录数
  6. private int pages; //总页数
  7. private Boolean reasonable; //分页合理化
  8. private Boolean pageSizeZero; //当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果

PageInfo对象:


     
     
  1. private int pageNum; //当前页
  2. private int pageSize; //每页显示数据条数
  3. private int size; //当前页的数量
  4. private int startRow; //始页首行行号
  5. private int endRow; //尾页尾行行号
  6. private long total; //总记录数
  7. private int pages; //总页数
  8. private List<T> list; //查询结果的数据
  9. private int firstPage; //首页
  10. private int prePage; //上一页
  11. private int nextPage; // 下一页
  12. private int lastPage; //最后一页
  13. private boolean isFirstPage; //是不是第一页
  14. private boolean isLastPage; //是不是最后一页
  15. private boolean hasPreviousPage; //有没有上一页
  16. private boolean hasNextPage; //有没有下一页
  17. private int navigatePages; //所有导航页号
  18. private int[] navigatepageNums; //导航页码数

二:Page和PageInfo:源码;(这部分,仅供参考,爱看不看)

1.Page源码;


     
     
  1. /*
  2. * The MIT License (MIT)
  3. *
  4. * Copyright (c) 2014-2017 abel533@gmail.com
  5. *
  6. * Permission is hereby granted, free of charge, to any person obtaining a copy
  7. * of this software and associated documentation files (the "Software"), to deal
  8. * in the Software without restriction, including without limitation the rights
  9. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. * copies of the Software, and to permit persons to whom the Software is
  11. * furnished to do so, subject to the following conditions:
  12. *
  13. * The above copyright notice and this permission notice shall be included in
  14. * all copies or substantial portions of the Software.
  15. *
  16. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22. * THE SOFTWARE.
  23. */
  24. package com.github.pagehelper;
  25. import java.io.Closeable;
  26. import java.util.ArrayList;
  27. import java.util.List;
  28. /**
  29. * Mybatis - 分页对象
  30. *
  31. * @author liuzh/abel533/isea533
  32. * @version 3.6.0
  33. * 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper
  34. */
  35. public class Page<E> extends ArrayList<E> implements Closeable {
  36. private static final long serialVersionUID = 1L;
  37. /**
  38. * 页码,从1开始
  39. */
  40. private int pageNum;
  41. /**
  42. * 页面大小
  43. */
  44. private int pageSize;
  45. /**
  46. * 起始行
  47. */
  48. private int startRow;
  49. /**
  50. * 末行
  51. */
  52. private int endRow;
  53. /**
  54. * 总数
  55. */
  56. private long total;
  57. /**
  58. * 总页数
  59. */
  60. private int pages;
  61. /**
  62. * 包含count查询
  63. */
  64. private boolean count = true;
  65. /**
  66. * 分页合理化
  67. */
  68. private Boolean reasonable;
  69. /**
  70. * 当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果
  71. */
  72. private Boolean pageSizeZero;
  73. /**
  74. * 进行count查询的列名
  75. */
  76. private String countColumn;
  77. /**
  78. * 排序
  79. */
  80. private String orderBy;
  81. /**
  82. * 只增加排序
  83. */
  84. private boolean orderByOnly;
  85. public Page () {
  86. super();
  87. }
  88. public Page (int pageNum, int pageSize) {
  89. this(pageNum, pageSize, true, null);
  90. }
  91. public Page (int pageNum, int pageSize, boolean count) {
  92. this(pageNum, pageSize, count, null);
  93. }
  94. private Page (int pageNum, int pageSize, boolean count, Boolean reasonable) {
  95. super( 0);
  96. if (pageNum == 1 && pageSize == Integer.MAX_VALUE) {
  97. pageSizeZero = true;
  98. pageSize = 0;
  99. }
  100. this.pageNum = pageNum;
  101. this.pageSize = pageSize;
  102. this.count = count;
  103. calculateStartAndEndRow();
  104. setReasonable(reasonable);
  105. }
  106. /**
  107. * int[] rowBounds
  108. * 0 : offset
  109. * 1 : limit
  110. */
  111. public Page (int[] rowBounds, boolean count) {
  112. super( 0);
  113. if (rowBounds[ 0] == 0 && rowBounds[ 1] == Integer.MAX_VALUE) {
  114. pageSizeZero = true;
  115. this.pageSize = 0;
  116. } else {
  117. this.pageSize = rowBounds[ 1];
  118. this.pageNum = rowBounds[ 1] != 0 ? ( int) (Math.ceil((( double) rowBounds[ 0] + rowBounds[ 1]) / rowBounds[ 1])) : 0;
  119. }
  120. this.startRow = rowBounds[ 0];
  121. this.count = count;
  122. this.endRow = this.startRow + rowBounds[ 1];
  123. }
  124. public List<E> getResult () {
  125. return this;
  126. }
  127. public int getPages () {
  128. return pages;
  129. }
  130. public Page<E> setPages (int pages) {
  131. this.pages = pages;
  132. return this;
  133. }
  134. public int getEndRow () {
  135. return endRow;
  136. }
  137. public Page<E> setEndRow (int endRow) {
  138. this.endRow = endRow;
  139. return this;
  140. }
  141. public int getPageNum () {
  142. return pageNum;
  143. }
  144. public Page<E> setPageNum (int pageNum) {
  145. //分页合理化,针对不合理的页码自动处理
  146. this.pageNum = ((reasonable != null && reasonable) && pageNum <= 0) ? 1 : pageNum;
  147. return this;
  148. }
  149. public int getPageSize () {
  150. return pageSize;
  151. }
  152. public Page<E> setPageSize (int pageSize) {
  153. this.pageSize = pageSize;
  154. return this;
  155. }
  156. public int getStartRow () {
  157. return startRow;
  158. }
  159. public Page<E> setStartRow (int startRow) {
  160. this.startRow = startRow;
  161. return this;
  162. }
  163. public long getTotal () {
  164. return total;
  165. }
  166. public void setTotal (long total) {
  167. this.total = total;
  168. if (total == - 1) {
  169. pages = 1;
  170. return;
  171. }
  172. if (pageSize > 0) {
  173. pages = ( int) (total / pageSize + ((total % pageSize == 0) ? 0 : 1));
  174. } else {
  175. pages = 0;
  176. }
  177. //分页合理化,针对不合理的页码自动处理
  178. if ((reasonable != null && reasonable) && pageNum > pages) {
  179. if(pages!= 0){
  180. pageNum = pages;
  181. }
  182. calculateStartAndEndRow();
  183. }
  184. }
  185. public Boolean getReasonable () {
  186. return reasonable;
  187. }
  188. public Page<E> setReasonable (Boolean reasonable) {
  189. if (reasonable == null) {
  190. return this;
  191. }
  192. this.reasonable = reasonable;
  193. //分页合理化,针对不合理的页码自动处理
  194. if ( this.reasonable && this.pageNum <= 0) {
  195. this.pageNum = 1;
  196. calculateStartAndEndRow();
  197. }
  198. return this;
  199. }
  200. public Boolean getPageSizeZero () {
  201. return pageSizeZero;
  202. }
  203. public Page<E> setPageSizeZero (Boolean pageSizeZero) {
  204. if (pageSizeZero != null) {
  205. this.pageSizeZero = pageSizeZero;
  206. }
  207. return this;
  208. }
  209. public String getOrderBy () {
  210. return orderBy;
  211. }
  212. public <E> Page<E> setOrderBy (String orderBy) {
  213. this.orderBy = orderBy;
  214. return (Page<E>) this;
  215. }
  216. public boolean isOrderByOnly () {
  217. return orderByOnly;
  218. }
  219. public void setOrderByOnly (boolean orderByOnly) {
  220. this.orderByOnly = orderByOnly;
  221. }
  222. /**
  223. * 计算起止行号
  224. */
  225. private void calculateStartAndEndRow () {
  226. this.startRow = this.pageNum > 0 ? ( this.pageNum - 1) * this.pageSize : 0;
  227. this.endRow = this.startRow + this.pageSize * ( this.pageNum > 0 ? 1 : 0);
  228. }
  229. public boolean isCount () {
  230. return this.count;
  231. }
  232. public Page<E> setCount (boolean count) {
  233. this.count = count;
  234. return this;
  235. }
  236. /**
  237. * 设置页码
  238. *
  239. * @param pageNum
  240. * @return
  241. */
  242. public Page<E> pageNum (int pageNum) {
  243. //分页合理化,针对不合理的页码自动处理
  244. this.pageNum = ((reasonable != null && reasonable) && pageNum <= 0) ? 1 : pageNum;
  245. return this;
  246. }
  247. /**
  248. * 设置页面大小
  249. *
  250. * @param pageSize
  251. * @return
  252. */
  253. public Page<E> pageSize (int pageSize) {
  254. this.pageSize = pageSize;
  255. calculateStartAndEndRow();
  256. return this;
  257. }
  258. /**
  259. * 是否执行count查询
  260. *
  261. * @param count
  262. * @return
  263. */
  264. public Page<E> count (Boolean count) {
  265. this.count = count;
  266. return this;
  267. }
  268. /**
  269. * 设置合理化
  270. *
  271. * @param reasonable
  272. * @return
  273. */
  274. public Page<E> reasonable (Boolean reasonable) {
  275. setReasonable(reasonable);
  276. return this;
  277. }
  278. /**
  279. * 当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果
  280. *
  281. * @param pageSizeZero
  282. * @return
  283. */
  284. public Page<E> pageSizeZero (Boolean pageSizeZero) {
  285. setPageSizeZero(pageSizeZero);
  286. return this;
  287. }
  288. /**
  289. * 指定 count 查询列
  290. *
  291. * @param columnName
  292. * @return
  293. */
  294. public Page<E> countColumn (String columnName) {
  295. this.countColumn = columnName;
  296. return this;
  297. }
  298. public PageInfo<E> toPageInfo () {
  299. PageInfo<E> pageInfo = new PageInfo<E>( this);
  300. return pageInfo;
  301. }
  302. public PageSerializable<E> toPageSerializable () {
  303. PageSerializable<E> serializable = new PageSerializable<E>( this);
  304. return serializable;
  305. }
  306. public <E> Page<E> doSelectPage (ISelect select) {
  307. select.doSelect();
  308. return (Page<E>) this;
  309. }
  310. public <E> PageInfo<E> doSelectPageInfo (ISelect select) {
  311. select.doSelect();
  312. return (PageInfo<E>) this.toPageInfo();
  313. }
  314. public <E> PageSerializable<E> doSelectPageSerializable (ISelect select) {
  315. select.doSelect();
  316. return (PageSerializable<E>) this.toPageSerializable();
  317. }
  318. public long doCount (ISelect select) {
  319. this.pageSizeZero = true;
  320. this.pageSize = 0;
  321. select.doSelect();
  322. return this.total;
  323. }
  324. public String getCountColumn () {
  325. return countColumn;
  326. }
  327. public void setCountColumn (String countColumn) {
  328. this.countColumn = countColumn;
  329. }
  330. @Override
  331. public String toString () {
  332. return "Page{" +
  333. "count=" + count +
  334. ", pageNum=" + pageNum +
  335. ", pageSize=" + pageSize +
  336. ", startRow=" + startRow +
  337. ", endRow=" + endRow +
  338. ", total=" + total +
  339. ", pages=" + pages +
  340. ", reasonable=" + reasonable +
  341. ", pageSizeZero=" + pageSizeZero +
  342. '}' + super.toString();
  343. }
  344. @Override
  345. public void close () {
  346. PageHelper.clearPage();
  347. }
  348. }

2.PageInfo源码;


     
     
  1. /*
  2. * The MIT License (MIT)
  3. *
  4. * Copyright (c) 2014-2017 abel533@gmail.com
  5. *
  6. * Permission is hereby granted, free of charge, to any person obtaining a copy
  7. * of this software and associated documentation files (the "Software"), to deal
  8. * in the Software without restriction, including without limitation the rights
  9. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. * copies of the Software, and to permit persons to whom the Software is
  11. * furnished to do so, subject to the following conditions:
  12. *
  13. * The above copyright notice and this permission notice shall be included in
  14. * all copies or substantial portions of the Software.
  15. *
  16. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22. * THE SOFTWARE.
  23. */
  24. package com.github.pagehelper;
  25. import java.util.Collection;
  26. import java.util.List;
  27. /**
  28. * 对Page<E>结果进行包装
  29. * <p/>
  30. * 新增分页的多项属性,主要参考:http://bbs.csdn.net/topics/360010907
  31. *
  32. * @author liuzh/abel533/isea533
  33. * @version 3.3.0
  34. * @since 3.2.2
  35. * 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper
  36. */
  37. @SuppressWarnings({"rawtypes", "unchecked"})
  38. public class PageInfo<T> extends PageSerializable<T> {
  39. //当前页
  40. private int pageNum;
  41. //每页的数量
  42. private int pageSize;
  43. //当前页的数量
  44. private int size;
  45. //由于startRow和endRow不常用,这里说个具体的用法
  46. //可以在页面中"显示startRow到endRow 共size条数据"
  47. //当前页面第一个元素在数据库中的行号
  48. private int startRow;
  49. //当前页面最后一个元素在数据库中的行号
  50. private int endRow;
  51. //总页数
  52. private int pages;
  53. //前一页
  54. private int prePage;
  55. //下一页
  56. private int nextPage;
  57. //是否为第一页
  58. private boolean isFirstPage = false;
  59. //是否为最后一页
  60. private boolean isLastPage = false;
  61. //是否有前一页
  62. private boolean hasPreviousPage = false;
  63. //是否有下一页
  64. private boolean hasNextPage = false;
  65. //导航页码数
  66. private int navigatePages;
  67. //所有导航页号
  68. private int[] navigatepageNums;
  69. //导航条上的第一页
  70. private int navigateFirstPage;
  71. //导航条上的最后一页
  72. private int navigateLastPage;
  73. public PageInfo () {
  74. }
  75. /**
  76. * 包装Page对象
  77. *
  78. * @param list
  79. */
  80. public PageInfo (List<T> list) {
  81. this(list, 8);
  82. }
  83. /**
  84. * 包装Page对象
  85. *
  86. * @param list page结果
  87. * @param navigatePages 页码数量
  88. */
  89. public PageInfo (List<T> list, int navigatePages) {
  90. super(list);
  91. if (list instanceof Page) {
  92. Page page = (Page) list;
  93. this.pageNum = page.getPageNum();
  94. this.pageSize = page.getPageSize();
  95. this.pages = page.getPages();
  96. this.size = page.size();
  97. //由于结果是>startRow的,所以实际的需要+1
  98. if ( this.size == 0) {
  99. this.startRow = 0;
  100. this.endRow = 0;
  101. } else {
  102. this.startRow = page.getStartRow() + 1;
  103. //计算实际的endRow(最后一页的时候特殊)
  104. this.endRow = this.startRow - 1 + this.size;
  105. }
  106. } else if (list instanceof Collection) {
  107. this.pageNum = 1;
  108. this.pageSize = list.size();
  109. this.pages = this.pageSize > 0 ? 1 : 0;
  110. this.size = list.size();
  111. this.startRow = 0;
  112. this.endRow = list.size() > 0 ? list.size() - 1 : 0;
  113. }
  114. if (list instanceof Collection) {
  115. this.navigatePages = navigatePages;
  116. //计算导航页
  117. calcNavigatepageNums();
  118. //计算前后页,第一页,最后一页
  119. calcPage();
  120. //判断页面边界
  121. judgePageBoudary();
  122. }
  123. }
  124. public static <T> PageInfo<T> of (List<T> list) {
  125. return new PageInfo<T>(list);
  126. }
  127. public static <T> PageInfo<T> of (List<T> list, int navigatePages) {
  128. return new PageInfo<T>(list, navigatePages);
  129. }
  130. /**
  131. * 计算导航页
  132. */
  133. private void calcNavigatepageNums () {
  134. //当总页数小于或等于导航页码数时
  135. if (pages <= navigatePages) {
  136. navigatepageNums = new int[pages];
  137. for ( int i = 0; i < pages; i++) {
  138. navigatepageNums[i] = i + 1;
  139. }
  140. } else { //当总页数大于导航页码数时
  141. navigatepageNums = new int[navigatePages];
  142. int startNum = pageNum - navigatePages / 2;
  143. int endNum = pageNum + navigatePages / 2;
  144. if (startNum < 1) {
  145. startNum = 1;
  146. //(最前navigatePages页
  147. for ( int i = 0; i < navigatePages; i++) {
  148. navigatepageNums[i] = startNum++;
  149. }
  150. } else if (endNum > pages) {
  151. endNum = pages;
  152. //最后navigatePages页
  153. for ( int i = navigatePages - 1; i >= 0; i--) {
  154. navigatepageNums[i] = endNum--;
  155. }
  156. } else {
  157. //所有中间页
  158. for ( int i = 0; i < navigatePages; i++) {
  159. navigatepageNums[i] = startNum++;
  160. }
  161. }
  162. }
  163. }
  164. /**
  165. * 计算前后页,第一页,最后一页
  166. */
  167. private void calcPage () {
  168. if (navigatepageNums != null && navigatepageNums.length > 0) {
  169. navigateFirstPage = navigatepageNums[ 0];
  170. navigateLastPage = navigatepageNums[navigatepageNums.length - 1];
  171. if (pageNum > 1) {
  172. prePage = pageNum - 1;
  173. }
  174. if (pageNum < pages) {
  175. nextPage = pageNum + 1;
  176. }
  177. }
  178. }
  179. /**
  180. * 判定页面边界
  181. */
  182. private void judgePageBoudary () {
  183. isFirstPage = pageNum == 1;
  184. isLastPage = pageNum == pages || pages == 0;
  185. hasPreviousPage = pageNum > 1;
  186. hasNextPage = pageNum < pages;
  187. }
  188. public int getPageNum () {
  189. return pageNum;
  190. }
  191. public void setPageNum (int pageNum) {
  192. this.pageNum = pageNum;
  193. }
  194. public int getPageSize () {
  195. return pageSize;
  196. }
  197. public void setPageSize (int pageSize) {
  198. this.pageSize = pageSize;
  199. }
  200. public int getSize () {
  201. return size;
  202. }
  203. public void setSize (int size) {
  204. this.size = size;
  205. }
  206. public int getStartRow () {
  207. return startRow;
  208. }
  209. public void setStartRow (int startRow) {
  210. this.startRow = startRow;
  211. }
  212. public int getEndRow () {
  213. return endRow;
  214. }
  215. public void setEndRow (int endRow) {
  216. this.endRow = endRow;
  217. }
  218. public int getPages () {
  219. return pages;
  220. }
  221. public void setPages (int pages) {
  222. this.pages = pages;
  223. }
  224. public int getPrePage () {
  225. return prePage;
  226. }
  227. public void setPrePage (int prePage) {
  228. this.prePage = prePage;
  229. }
  230. public int getNextPage () {
  231. return nextPage;
  232. }
  233. public void setNextPage (int nextPage) {
  234. this.nextPage = nextPage;
  235. }
  236. public boolean isIsFirstPage () {
  237. return isFirstPage;
  238. }
  239. public void setIsFirstPage (boolean isFirstPage) {
  240. this.isFirstPage = isFirstPage;
  241. }
  242. public boolean isIsLastPage () {
  243. return isLastPage;
  244. }
  245. public void setIsLastPage (boolean isLastPage) {
  246. this.isLastPage = isLastPage;
  247. }
  248. public boolean isHasPreviousPage () {
  249. return hasPreviousPage;
  250. }
  251. public void setHasPreviousPage (boolean hasPreviousPage) {
  252. this.hasPreviousPage = hasPreviousPage;
  253. }
  254. public boolean isHasNextPage () {
  255. return hasNextPage;
  256. }
  257. public void setHasNextPage (boolean hasNextPage) {
  258. this.hasNextPage = hasNextPage;
  259. }
  260. public int getNavigatePages () {
  261. return navigatePages;
  262. }
  263. public void setNavigatePages (int navigatePages) {
  264. this.navigatePages = navigatePages;
  265. }
  266. public int[] getNavigatepageNums() {
  267. return navigatepageNums;
  268. }
  269. public void setNavigatepageNums (int[] navigatepageNums) {
  270. this.navigatepageNums = navigatepageNums;
  271. }
  272. public int getNavigateFirstPage () {
  273. return navigateFirstPage;
  274. }
  275. public int getNavigateLastPage () {
  276. return navigateLastPage;
  277. }
  278. public void setNavigateFirstPage (int navigateFirstPage) {
  279. this.navigateFirstPage = navigateFirstPage;
  280. }
  281. public void setNavigateLastPage (int navigateLastPage) {
  282. this.navigateLastPage = navigateLastPage;
  283. }
  284. @Override
  285. public String toString () {
  286. final StringBuilder sb = new StringBuilder( "PageInfo{");
  287. sb.append( "pageNum=").append(pageNum);
  288. sb.append( ", pageSize=").append(pageSize);
  289. sb.append( ", size=").append(size);
  290. sb.append( ", startRow=").append(startRow);
  291. sb.append( ", endRow=").append(endRow);
  292. sb.append( ", total=").append(total);
  293. sb.append( ", pages=").append(pages);
  294. sb.append( ", list=").append(list);
  295. sb.append( ", prePage=").append(prePage);
  296. sb.append( ", nextPage=").append(nextPage);
  297. sb.append( ", isFirstPage=").append(isFirstPage);
  298. sb.append( ", isLastPage=").append(isLastPage);
  299. sb.append( ", hasPreviousPage=").append(hasPreviousPage);
  300. sb.append( ", hasNextPage=").append(hasNextPage);
  301. sb.append( ", navigatePages=").append(navigatePages);
  302. sb.append( ", navigateFirstPage=").append(navigateFirstPage);
  303. sb.append( ", navigateLastPage=").append(navigateLastPage);
  304. sb.append( ", navigatepageNums=");
  305. if (navigatepageNums == null) {
  306. sb.append( "null");
  307. } else {
  308. sb.append( '[');
  309. for ( int i = 0; i < navigatepageNums.length; ++i) {
  310. sb.append(i == 0 ? "" : ", ").append(navigatepageNums[i]);
  311. }
  312. sb.append( ']');
  313. }
  314. sb.append( '}');
  315. return sb.toString();
  316. }
  317. }

三:Page和PageInfo:使用;(重要!)

(1)首先,就是开启分页,设置【pageNum:当前页】和【pageSize:每页记录数】;

 (2)然后,我们会利用Mybatis,根据上面设置的分页条件,去查询数据库,得到查询结果;

(3)然后,可以根据前端对分页数据格式的要求,可以把(3)中查到的分页数据,包装成Page对象;

(4)或者,包装成PageInfo对象;

(5)使用Page对象还是使用PageInfo对象?

          ● 目前的个人理解:使用Page对象还是PageInfo对象,需要根据前端的要求,或者说是根据接口对返回数据的格式的要求;

          ● 比如,在【Spring Boot电商项目29:商品分类模块八:后台的【分类列表(平铺)】接口;】中,【分类列表(平铺)接口】的接口文档要求,接口的返回是:

所以,对于这样的接口要求,很自然就是使用PageInfo对象;

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览 125711 人正在系统学习中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程. 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 产生 session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。 首先建立一个名字为 MyBaits 的 dynamic web project 1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的lib目录. 3. 创建mysql 测试数据库和用户表,注意,这里采用的是 utf-8 编码 创建用户表,并插入一条测试数据 程序代码 程序代码 Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值