MyBatis怎样实现MySQL动态分页

MyBatis怎样实现MySQL动态分页,第1张

原料,mybatis的jar包,各种数据库的分页sql语句。

这就要看你是使用何种数据库了,因为有些数据库的分页实现可以更简单,比如MySql的limit关键字,而mybatis必须通过sql语句才能实现分页,所以在我们的<select>标签可以这样写:参数paramterType可以传一个封装了分页信息(比如当前页数,每页大小等)对象,如果是带条件的分页,可以将分页的对象和条件对象放入一个map中。然后在sql语句中就可以用#{}访问分页信息:

比如Mysql的分页:

select  *  from  Student  limit   #{pageSize*(pageNo-1)}  #{pageSize}

使用方法

1. 引入分页插件

引入分页插件一共有下面2种方式,推荐使用Maven方式,这种方式方便更新。

1). 引入Jar包

如果你想使用本项目的jar包而不是直接引入类,你可以在这里下载各个版本的jar包(点击Download下的jar即可下载)

https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/

http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/

由于使用了sql解析工具,你还需要下载jsqlparser.jar(这个文件完全独立,不依赖其他):

http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.1/

http://git.oschina.net/free/Mybatis_PageHelper/attach_files

2). 使用maven

添加如下依赖:

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper</artifactId>

<version>3.6.0</version>

</dependency>

当使用maven中央库中的快照版(带"-SNAPSHOT"的版本)时,需要在pom.xml中添加如下配置:

<repositories>

<repository>

<id>sonatype-nexus-snapshots</id>

<name>Sonatype Nexus Snapshots</name>

<url>http://oss.sonatype.org/content/repositories/snapshots</url>

<releases>

<enabled>false</enabled>

</releases>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

</repositories>

2. 在Mybatis配置xml中配置拦截器插件:

<!--

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

properties?, settings?,

typeAliases?, typeHandlers?,

objectFactory?,objectWrapperFactory?,

plugins?,

environments?, databaseIdProvider?, mappers?

-->

<plugins>

<!-- com.github.pagehelper为PageHelper类所在包名 -->

<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="true"/>

<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->

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

<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->

<property name="params" value="pageNum=startpageSize=limitpageSizeZero=zeroreasonable=helicount=contsql"/>

</plugin>

</plugins>

这里的com.github.pagehelper.PageHelper使用完整的类路径。

其他五个参数说明:

增加dialect属性,使用时必须指定该属性,可选值为oracle,mysql,mariadb,sqlite,hsqldb,postgresql,sqlserver,没有默认值,必须指定该属性。

增加offsetAsPageNum属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。当该参数设置为true时,使用RowBounds分页时,会将offset参数当成pageNum使用,可以用页码和页面大小两个参数进行分页。

增加rowBoundsWithCount属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。当该参数设置为true时,使用RowBounds分页会进行count查询。

增加pageSizeZero属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。当该参数设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是Page类型)。

增加reasonable属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。具体作用请看上面配置文件中的注释内容。

为了支持startPage(Object params)方法,增加了一个params参数来配置参数映射,用于从Map或ServletRequest中取值,可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7332367.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存