MyBatis 的分页功能是基于内存的分页,即先查询出所有记录,再按起始位置和页面容量取出结果。
本节我们为查询网站记录增加分页功能,要求结果列表按照 id 升序排列(本节示例基于《Mybatis简单示例程序》一节的代码实现)。
PersonMapper 中方法如下。
/**
*
* @param site
* @param currentPageNo 起始位置
* @param pageSize 页面容量
* @return
*/
List<Person> queryForPage(@Param("person") Person person,
@Param("start") Integer start,
@Param("pageSiz
相比原来的 queryForPage 方法,增加了两个参数,起始位置(from)和页面容量(pageSize),用于实现分页查询。
修改 PersonMapper.xml 的查询语句,增加 limit 关键字,SQL 映射代码如下。
<select id="queryForPage" resultMap="BaseResultMap">
<bind name="name" value="'%'+ condition.name + '%'"/>
<bind name="province" value="'%' + condition.province + '%'"/>
select
<include refid="Base_Column_List"></include>
from person where name like #{name}
and province like #{province}
order by id
limit #{start}, #{pageSize}
</select>
测试类代码如下。
@Test
public void testPage(){
Person condition = new Person();
condition.setName("jack");
condition.setProvince("广东");
List<Person> list = personMapper.queryForPage(condition, 0, 20);
for(Person p : list){
log.info("{}", p);
}
}
运行结果如下。
上述代码中,根据传入的起始位置(currentPageNo=0)和页面容量(pageSize=3)进行相应分页,查看第一页的数据列表,运行测试方法,输出正确的分页列表。
注意:MyBatis 实现分页查询属于 DAO 层操作,由于 DAO 层不牵涉任何业务实现,所以实现分页的方法中第一个参数为 limit 的起始位置(下标从 0 开始),而不是用户输入的真正页码(页码从1开始)。
页码如何转换为 limit 的起始位置下标,即:起始位置下标=(页码-1)*页面容量,那么这个转换操作必然不能在 DAO 层实现,需要在业务层实现。所以我们在测试类中传入的参数为下标,而不是页码。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
本文链接:https://www.jhelp.net/p/wqjWm5a0EdBxtqYV (转载请保留)。
关注下面的标签,发现更多相似文章
本站推荐
-
549
-
526
-
521
-
512
-
503
文章目录