MyBatis实现分页功能

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MyBatis实现分页功能
MySQL 的分页功能是基于内存的分页(即查出来所有记录,再按起始位置和页⾯容量取出结果)。

案例:①根据⽤户名(⽀持模糊查询)、⽤户⾓⾊ id 查询⽤户列表(即根据⽤户名称或根据⽤户⾓⾊ id ⼜或是根据⽤户名称和⽤户⾓⾊ id 都可以查询出⽤户列表) ②查询结果列表按照创建时间降序排列
UserMapper.java 中定义实现接⼝
package cn.mybatis.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import er;
public interface UserMapper {
/**
* 查询⽤户表记录数
* @return
*/
public int count();
/**
* 根据⽤户名(⽀持模糊查询)、⽤户⾓⾊ id 查询⽤户列表(分页显⽰)
* @param pageIndex 页码下标=(第⼏页-1)
* @param pageSize 每页容量
* @return
*/
public List<User> getUserListByPage(@Param("name") String userName,
@Param("role") int roleId,
@Param("index") int pageIndex,
@Param("size") int pageSize);
}
UserMapper.xml 映射⽂件中编写 SQL 语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-////DTD Mapper 3.0//EN"
"/dtd/mybatis-3-mapper.dtd">
<mapper namespace="erMapper">
<!--查询⽤户表记录数,使⽤聚合函数 count()实现,count(0)、count(1)、count(*)都可以查询出记录数 -->
<select id="count" resultType="int">
SELECT count(*) as count FROM
smbms_user
</select>
<!-- 1、查询⽤户列表(分页显⽰) 2、实现分页,通过 limit(起始位置,页⾯容量) -->
<select id="getUserListByPage" resultType="user">
SELECT * FROM `smbms_user` WHERE 1=1
<if test="role!=null">
AND userRole=#{role}
</if>
<if test="name!=null and name!=''">
AND userName LIKE CONCAT('%',#{name},'%')
</if>
ORDER BY creationDate DESC LIMIT #{index},#{size}
</select>
</mapper>
单元测试类
package cn.mybatis.test;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import erMapper;
import er;
import cn.mybatis.util.MyBatisUtil;
public class UserMapperTest {
@Test
public void testGetUserListByPage() {
SqlSession session = null;
List<User> userList = new ArrayList<User>();
int page = 1; // 第⼏页
int pageSize = 3; // 每页容量
int pageIndex = (page - 1) * pageSize; // 起始位置
String userName = "";
Integer roleId = 3;
try {
session = MyBatisUtil.getSqlSession();
userList = session.getMapper(UserMapper.class).getUserListByPage(userName, roleId, pageIndex, pageSize);
} catch (Exception e) {
e.printStackTrace();
} finally {
MyBatisUtil.close(session);
}
for (User user : userList) {
System.out.println(user);
}
}
}
说明:
1、MyBatis 实现分页查询,属于 DAO 层操作,由于 DAO 层是不牵涉任何业务实现的,所以实现分页的⽅法中第⼀个参数为 limit 的起始位置(下标从0开始),
⽽不是⽤户输⼊的真正的页码(页码从1开始),页码转换成 limit 的起始位置下标,即:起始位置下标=(页码-1)×页⾯容量,那么这个转换操作必然不能在 DAO 层实现,需要在业务层实现。

故我们在测试类中传⼊的参数为下标,⽽不是页码。

2、实际需求中,需要四个参数(总页码、总记录数、起始位置、页⾯容量),此处只是做测试,并没有在实际页⾯实现分页功能,因此没有使⽤到总页码、总记录数。

相关文档
最新文档