实现 Mybatis 分页
上一篇文章里已经讲到了 Mybatis与 Spring MVC 的集成,并且做了一个列表展示,显示出所有 article 列表,但没有用到分页,在实际的项目中,分页是肯定需要的。而且是物理分页,不是内存分页。对于物理分页方案,不同的数据库,有不同的实现方法,对于 Mysql 来说 就是利用 limit offset,pagesize 方式来实现的。oracle 是通过 rownum 来实现的,如果你熟悉相关数据库的操作,是一样的很好扩展,本文以 Mysql 为例子来讲述。先看一下效果图(源代码在文章最后提供下载):
实现 Mybatis 物理分页,一个最简单的方式是,是在你的 mapper 的 SQL 语句中直接写类似如下方式 :
1 | <select id="getUserArticles" parameterType="Your_params" resultMap="resultUserArticleList"> |
请注意这里的 parameterType 是你传入的参数类,或者map ,里面包含了 offset,pagesize ,和其他你需要的参数,用这种方式,肯定可以实现分页。这是简单的一种方式。但更通用的一种方式是用 mybatis 插件的方式. 参考了网上的很多资料 ,mybatis plugin 方面的资料。写自己的插件。
1 | package com.yihaomen.util; |
此插件有两个辅助类:PageInfo,ReflectHelper,你可以下载源代码参考。 写了插件之后,当然需要在 Mybatis 的配置文件 Configuration.xml 里配置这个插件
1 | <plugins> |
请注意,这个插件定义了一个规则,也就是在 mapper 中 sql 语句的 id 必须包含 ListPage 才能被拦截。否则将不会分页处理。
插件写好了,现在就可以在 spring mvc 中的 controller 层中写一个方法来测试这个分页:
1 | "/pagelist") ( |
然后运行程序,进入分页页面,你就可以看到结果了: