分页

MyBatis 的分页功能是基于内存的分页,即先查询出所有记录,再按起始位置和页面容量取出结果。

示例

WebsiteMapper 

/**
*
* @param site
* @param currentPageNo 起始位置
* @param pageSize      页面容量
* @return
*/
public List<Website> selectWebsite(@Param("site") Website site, @Param("from") Integer currentPageNo,
        @Param("pageSize") Integer pageSize);

WebsiteMapper.xml 的查询语句,增加 limit 关键字,SQL 映射代码如下

<select id="selectWebsite" resultType="net.biancheng.po.Website">
    SELECT id,name,url,age,country
    FROM website
    <trim prefix="where" prefixOverrides="and">
        <if test="site.name != null and site.name !=''">
            AND name LIKE CONCAT ('%',#{site.name},'%')
        </if>
        <if test="site.url!= null and site.url !=''">
            AND url LIKE CONCAT ('%',#{site.url},'%')
        </if>
        ORDER BY id limit #{from},#{pageSize}
    </trim>
</select>

上述代码中,根据传入的起始位置(currentPageNo=0)和页面容量(pageSize=3)进行相应分页,查看第一页的数据列表,运行测试方法,输出正确的分页列表。

注意:MyBatis 实现分页查询属于 DAO 层操作,由于 DAO 层不牵涉任何业务实现,所以实现分页的方法中第一个参数为 limit 的起始位置(下标从 0 开始),而不是用户输入的真正页码(页码从1开始)。

页码如何转换为 limit 的起始位置下标,即:起始位置下标=(页码-1)*页面容量

那么这个转换操作必然不能在 DAO 层实现,需要在业务层实现。所以我们在测试类中传入的参数为下标,而不是页码。

posted @ 2022-02-12 12:02  幻影黑子  阅读(78)  评论(0)    收藏  举报