好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MyBatis分页插件PageHelper的具体使用

mybatis分页插件pagehelper

如果你也在用 mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。

pagehelper是一个mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工.

pagehelper的使用

优点:无需你自己去封装以及关心sql分页等问题,使用很方便,前端取数据也很方便。

1.引入pagehelper依赖

?

1

2

3

4

5

<dependency>

   <groupid>com.github.pagehelper</groupid>

   <artifactid>pagehelper</artifactid>

   <version> 5.1 . 2 <ersion>

</dependency>

2.配置applicationcontext.xml文件

在spring的 sqlsessionfactory 的 bean 中增加一个分页拦截器属性

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<bean id= "sqlsessionfactory" class = "org.mybatis.spring.sqlsessionfactorybean" >

   <property name= "plugins" >

         <array>

           <bean class = "com.github.pagehelper.pageinterceptor" >

             <property name= "properties" >

               <value>

                 <!-- 这里设定你的数据库类型 -->

                 helperdialect=mysql

               </value>

             </property>

           </bean>

         </array>

   </property>

</bean>

3.调用pagehelper的方法

在service方法中调用pagehelper的静态方法 startpage (注意一定要在实际查询数据库之前调用该方法),传入需要查询的页号和每页大小,返回pagehelper插件提供的pageinfo对象。即可自动完成数据库物理分页,无须在你的sql语句中手工加 limit 子句

4. pageinfo的结构

关于pageinfo的结构请参看源码,这里通过返回的json来展示。根据需要取pageinfo对象的相应属性即可。

5.pageinfo类说明

类源码(更多源码去github上查看即可):

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

public class pageinfo<t> implements serializable {

   private static final long serialversionuid = 1l;

   //当前页

   private int pagenum;

   //每页的数量

   private int pagesize;

   //当前页的数量

   private int size;

 

   //由于startrow和endrow不常用,这里说个具体的用法

   //可以在页面中"显示startrow到endrow 共size条数据"

 

   //当前页面第一个元素在数据库中的行号

   private int startrow;

   //当前页面最后一个元素在数据库中的行号

   private int endrow;

   //总记录数

   private long total;

   //总页数

   private int pages;

   //结果集

   private list<t> list;

 

   //前一页

   private int prepage;

   //下一页

   private int nextpage;

 

   //是否为第一页

   private boolean isfirstpage = false ;

   //是否为最后一页

   private boolean islastpage = false ;

   //是否有前一页

   private boolean haspreviouspage = false ;

   //是否有下一页

   private boolean hasnextpage = false ;

   //导航页码数

   private int navigatepages;

   //所有导航页号

   private int [] navigatepagenums;

   //导航条上的第一页

   private int navigatefirstpage;

   //导航条上的最后一页

   private int navigatelastpage;

 

   public pageinfo() {

   }

 

   /**

    * 包装page对象

    *

    * @param list

    */

   public pageinfo(list<t> list) {

     this (list, 8 );

   }

 

   /**

    * 包装page对象

    *

    * @param list     page结果

    * @param navigatepages 页码数量

    */

   public pageinfo(list<t> list, int navigatepages) {

     if (list instanceof page) {

       page page = (page) list;

       this .pagenum = page.getpagenum();

       this .pagesize = page.getpagesize();

 

       this .pages = page.getpages();

       this .list = page;

       this .size = page.size();

       this .total = page.gettotal();

       //由于结果是>startrow的,所以实际的需要+1

       if ( this .size == 0 ) {

         this .startrow = 0 ;

         this .endrow = 0 ;

       } else {

         this .startrow = page.getstartrow() + 1 ;

         //计算实际的endrow(最后一页的时候特殊)

         this .endrow = this .startrow - 1 + this .size;

       }

     } else if (list instanceof collection) {

       this .pagenum = 1 ;

       this .pagesize = list.size();

 

       this .pages = this .pagesize > 0 ? 1 : 0 ;

       this .list = list;

       this .size = list.size();

       this .total = list.size();

       this .startrow = 0 ;

       this .endrow = list.size() > 0 ? list.size() - 1 : 0 ;

     }

     if (list instanceof collection) {

       this .navigatepages = navigatepages;

       //计算导航页

       calcnavigatepagenums();

       //计算前后页,第一页,最后一页

       calcpage();

       //判断页面边界

       judgepageboudary();

     }

   }

 

 

.......

}

这里只列出所有属性和构造方法,那么可以清晰的看到一些属性的含义,一些属性是如何初始化,并且初始化值是怎样的,更多详细情况可以自己去查看源码,都有中文注释

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://segmentfault测试数据/a/1190000018200373

查看更多关于MyBatis分页插件PageHelper的具体使用的详细内容...

  阅读:17次