好得很程序员自学网

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

Mybatis分页插件使用方法详解

本文实例为大家分享了mybatis 分页插件 使用的具体代码,供大家参考,具体内容如下

1.分页插件简介

pagehelper源码

都说这是史上最好用的分页插件,支持多种数据库以多种方式分页。

2.分页插件的使用

2.1导入maven依赖

?

1

2

3

4

5

<dependency>

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

  <artifactid>pagehelper</artifactid>

  <version>最新版本</version>

</dependency>

2.2 添加配置

1.在 mybatis的config配置文件 中添加拦截器 <plugin>

?

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

<!--

  plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:

  properties?, settings?,

  typealiases?, typehandlers?,

  objectfactory?,objectwrapperfactory?,

  plugins?,

  environments?, databaseidprovider?, mappers?

-->

<plugins>

   <plugin interceptor= "com.github.pagehelper.pagehelper" >

    <property name= "dialect" value= "mysql" />

    <!-- 该参数默认为 false -->

    <!-- 设置为 true 时,会将rowbounds第一个参数offset当成pagenum页码使用 -->

    <!-- 和startpage中的pagenum效果一样-->

    <property name= "offsetaspagenum" value= "true" />

    <!-- 该参数默认为 false -->

    <!-- 设置为 true 时,使用rowbounds分页会进行count查询 -->

    <property name= "rowboundswithcount" value= "true" />

    <!-- 设置为 true 时,如果pagesize= 0 或者rowbounds.limit = 0 就会查询出全部的结果 -->

    <!-- (相当于没有执行分页查询,但是返回结果仍然是page类型)-->

    <property name= "pagesizezero" value= "true" />

    <!-- 3.3 . 0 版本可用 - 分页参数合理化,默认 false 禁用 -->

    <!-- 启用合理化时,如果pagenum< 1 会查询第一页,如果pagenum>pages会查询最后一页 -->

    <!-- 禁用合理化时,如果pagenum< 1 或pagenum>pages会返回空数据 -->

    <property name= "reasonable" value= "false" />

    <!-- 3.5 . 0 版本可用 - 为了支持startpage(object params)方法 -->

    <!-- 增加了一个`params`参数来配置参数映射,用于从map或servletrequest中取值 -->

    <!-- 可以配置pagenum,pagesize,count,pagesizezero,reasonable,不配置映射的用默认值 -->

    <!-- 不理解该含义的前提下,不要随便复制该配置 -->

    <property name= "params" value= "pagenum=start;pagesize=limit;" />

   </plugin>

</plugins>

2.或者在spring配置中添加

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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

  <!-- 注意其他配置 -->

  <property name= "plugins" >

  <array>

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

   <property name= "properties" >

    <!--使用下面的方式配置参数,一行配置一个 -->

    <value>

    params=value1

    </value>

   </property>

   </bean>

  </array>

  </property>

</bean>

这两种方式不能同时用

3.在代码中的使用

3.1设置一个基础的请求类

?

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

public class baserequest implements serializable {

 

  private static final long serialversionuid = 1193444819529643410l;

 

  private integer pagenum; //页数

  private integer pagesize; //每页行数

  private boolean count; //是否查询总条数

 

  public integer getpagenum() {

   return pagenum;

  }

 

  public void setpagenum(integer pagenum) {

   this .pagenum = pagenum;

  }

 

  public integer getpagesize() {

   return pagesize;

  }

 

  public void setpagesize(integer pagesize) {

   this .pagesize = pagesize;

  }

 

  public boolean getcount() {

   return count;

  }

 

  public void setcount( boolean count) {

   this .count = count;

  }

 

  @override

  public string tostring() {

   return "baserequest{" +

     "pagenum=" + pagenum +

     ", pagesize=" + pagesize +

     '}' ;

  }

}

3.2 设置一个基础的pageservice 接口

让每个service 去实现这个接口来设置分页的初始值

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

public interface pageservice {

 

  default void setdefaultpageinfo(baserequest baserequest) {

   if ( null != baserequest) {

    baserequest.setpagenum( null == baserequest.getpagenum() ? constants.page_num : baserequest.getpagenum());

    baserequest

      .setpagesize( null == baserequest.getpagesize() ? constants.page_size : baserequest.getpagesize());

    baserequest.setcount( null == baserequest.getcount() ? boolean . true : baserequest.getcount());

   } else {

    baserequest = new baserequest();

    baserequest.setpagenum(constants.page_num);

    baserequest.setpagesize(constants.page_size);

    baserequest.setcount( boolean . true );

   }

   pagehelper.startpage(baserequest.getpagenum(), baserequest.getpagesize(),baserequest.getcount());

  }

 

}

3.3 如果做了数据转换这用来复制属性值(可选)

数据模型entity 只对应数据库表中的字段, 出参与入参 都是数据传输对象 dto , 从数据库中查出来的是entity而 接口返回的是dto 所要beanutils.copyproperties复制属性,和pageutils.copyproperties 复制分页属性

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

public class pageutils {

 

  public static void copyproperties(pageinfo<?> source, pageinfo<?> des) {

   des.setendrow(source.getendrow());

   des.setfirstpage(source.getfirstpage());

   des.sethasnextpage(source.ishasnextpage());

   des.sethaspreviouspage(source.ishaspreviouspage());

   des.setisfirstpage(source.isisfirstpage());

   des.setislastpage(source.isislastpage());

   des.setnavigatepagenums(source.getnavigatepagenums());

   des.setnavigatepages(source.getnavigatepages());

   des.setnextpage(source.getnextpage());

   des.setorderby(source.getorderby());

   des.setpagenum(source.getpagenum());

   des.setpages(source.getpages());

   des.setpagesize(source.getpagesize());

   des.setprepage(source.getprepage());

   des.setsize(source.getsize());

   des.setstartrow(source.getstartrow());

   des.settotal(source.gettotal());

  }

}

4.使用示例

在orderservice实现类中

?

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

import com.github.pagehelper.pageinfo;

import com.javxuan测试数据mon.util.pageutils;

import com.javxuan.order.entity.order;

import com.javxuan.order.response.orderdto;

import com.javxuan.order.service.pageservice;

import org.springframework.beans.beanutils;

import org.springframework.beans.factory.annotation.autowired;

 

import java.util.arraylist;

 

public class orderservcieimpl implements iorderservcie, pageservice {

 

  @autowired

  iordermapper ordermapper;

 

  @getmapping ( "/order" )

  public pageinfo<orderdto> list(orderrequest orderrequest){

   //设置默认分页信息 pageservice的方法

   setdefaultpageinfo(orderrequest);

 

   //查出order列表

   list<order> orderlist = ordermapper.selectlist();

   //将entity的列表分页

   pageinfo<order> orderpageinfo = new pageinfo<>(orderlist);

 

   //连续显示5页与上面的二选一

   //pageinfo<order> orderpageinfo = new pageinfo<>(orderlist,5);

 

   //定义一个数据传输对象dtolist

   list<orderdto> dtolist = new arraylist<>();

   if ( null ==orderlist || orderlist.size<= 0 ){

    return null ;

   }

 

   //给dtolist 加值

   for (order order:orderlist){

    orderdto dto = new orderdto();

    //将entity 的属性值 复制给dto上

    beanutils.copyproperties(order, dto);

    dtolist.add(dto);

   }

 

   //给dto 分页

   pageinfo<orderdto> dtopageinfo = new pageinfo<>(dtolist);

 

   //连续显示5页 与上面的二选一

   //pageinfo<order> orderpageinfo = new pageinfo<>(orderlist,5);

 

   //将entity的分页信息复制给dtopageinfo上

   pageutils.copyproperties(orderpageinfo, dtopageinfo);

   return dtopageinfo;

  }

}

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

原文链接:https://blog.csdn.net/u014297148/article/details/80444454

查看更多关于Mybatis分页插件使用方法详解的详细内容...

  阅读:15次