一、需求说明:
为用户管理之查询用户列表功能增加分页实现
列表结果按照创建时间降序排列
二、分析
分页-DAO层实现:limit(起始位置,页面容量)
查询用户列表的方法增加2个参数:from,pageSize
首先完成总记录数的查询,根据页面容量,决定分多少页。
三、代码
UserMapper.java
/**
* 查询用户表记录数
* @return
*/
public int count();
public List<User> getUserListPage(@Param("userName")String userName,
@Param("userRole")Integer roleId,
@Param("from")Integer currentPageNo,
@Param("pageSize")Integer pageSize);
UserMapper.xml
<!-- 查询用户表的记录数 -->
<select id="count" resultType="int">
select count(1) as count from
smbms_user
</select>
<resultMap type="user" id="userListPage">
<id property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="userRole" column="userRole"/>
<result property="userRoleName" column="roleName"/>
</resultMap>
<select id="getUserListPage" resultMap="userListPage">
select u.* from smbms_user u, smbms_role r
where u.userRole=r.id
<if test="userName != null and userName != ''">
and userName like CONCAT('%',#{userName},'%')
</if>
<if test="userRole != null">
and userRole=#{userRole}
</if>
order by creationDate DESC limit #{from},#{pageSize}
</select>
UserMapperTest.java
@Test
public void testGetUserListPage() {
List<User> userList = null;
SqlSession sqlSession = null;
String userName = "";
Integer roleId = null;
Integer currentPageNo = 0;
Integer pageSize = 5;
try {
userList = MyBatisUtil.createSqlSession().getMapper(UserMapper.class).getUserListPage(userName, roleId, currentPageNo, pageSize);
} catch(Exception e) {
e.printStackTrace();
} finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
for(User _user:userList) {
logger.debug("testGetUserList userCode: " + _user.getUserCode()
+ "and userName: " + _user.getUserName()
+ "and userRoleName: " + _user.getUserRoleName()
+ "and address:" + _user.getAddress());
}
}
四、当前页码currentPageNo计算公式:(页码-1)* 页面容量
因为MyBatis的分页是DAO层,所以currentPageNo默认写0,控制在service层。