MyBatis 实现分页功能
MySQL 的分页功能是基于内存的分页(即查出来所有记录,再按起始位置和页面容量取出结果)。
案例:①根据用户名(支持模糊查询)、用户角色 id 查询用户列表(即根据用户名称或根据用户角色 id 又或是根据用户名称和用户角色 id 都可以查询出用户列表)
②查询结果列表按照创建时间降序排列
UserMapper.java 中定义实现接口
package cn.mybatis.dao; import java.util.List;
import org.apache.ibatis.annotations.Param;
import cn.mybatis.pojo.User; 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 "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.mybatis.dao.UserMapper"> <!--查询用户表记录数,使用聚合函数 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 cn.mybatis.dao.UserMapper;
import cn.mybatis.pojo.User;
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、实际需求中,需要四个参数(总页码、总记录数、起始位置、页面容量),此处只是做测试,并没有在实际页面实现分页功能,因此没有使用到总页码、总记录数。
MyBatis 实现分页功能的更多相关文章
- springboot+mybatis集成分页功能
1.使用idea搭建srpingboot项目 在pom.xml文件中引入如下的依赖: <dependency> <groupId>org.springframework.boo ...
- Spring Boot入门系列(十六)使用pagehelper实现分页功能
之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...
- spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能
软件简介 Spring是一个流行的控制反转(IoC)和面向切面(AOP)的容器框架,在java webapp开发中使用广泛.http://projects.spring.io/spring-frame ...
- sql,mybatis,javascript分页功能的实现
用三种不同的方法实现多数据的分页功能.原生sql和mybatis的操作需要每次点击不同页数时都发送http请求,进行一次数据库查询,如果放在前端页面写js语句则不需要每次都请求一次,下面是三种不同的方 ...
- MyBatis 拦截器 (实现分页功能)
由于业务关系 巴拉巴拉巴拉 好吧 简单来说就是 原来的业务是 需要再实现类里写 selectCount 和selectPage两个方法才能实现分页功能 现在想要达到效果是 只通过一个方法就可以实现 也 ...
- Mybatis Generator实现分页功能
Mybatis Generator实现分页功能 分类: IBATIS2013-07-17 17:03 882人阅读 评论(1) 收藏 举报 mybatisibatisgeneratorpage分页 众 ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(八):MyBatis分页功能实现
使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写 count 和 select,幸 ...
- SpringBoot集成Mybatis并具有分页功能PageHelper
SpringBoot集成Mybatis并具有分页功能PageHelper 环境:IDEA编译工具 第一步:生成测试的数据库表和数据 SET FOREIGN_KEY_CHECKS=0; ...
- Mybatis的分页插件PageHelper
Mybatis的分页插件PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper 文档地址:http://git.oschina. ...
随机推荐
- [CF Round #278] Tourists
给定一个n个点m条边的无向图,求图上的两点的所有的简单路径之间的最小边. 蓝链 $ n,m,q \leq 100000, w_i \leq 10 ^7$ Solution 考虑建立用缩点双来建立广义圆 ...
- [Usaco2006 Mar]Mooo 奶牛的歌声
Description Farmer John's N (1 <= N <= 50,000) cows are standing in a very straight row and mo ...
- [poj3744] Scout YYF I【概率dp 数学期望】
传送门:http://poj.org/problem?id=3744 令f(i)表示到i,安全的概率.则f(i) = f(i - 1) * p + f(i - 2) * (1 - p),若i位置有地雷 ...
- javaservlet介绍
servlet 是 serve applet的意思 Java servlet是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容. Servlet运行于支持Jav ...
- vijos P1426兴奋剂检查 多维费用背包问题的hash
https://vijos.org/p/1426 这是个好题,容易想到用dp[i][v1][v2][v3][v4][v5]表示在前i个物品中,各种东西的容量是那个的时候,能产生的最大价值. 时间不会T ...
- python_one-day
python入门_(1) 作者:_晓冬 归档:学习笔记 2017/9/9 目 录 第1章 练习... 1 1.1 格式化输出... 1 1.2 流程控制if..else. 1 1.3 流程控制whi ...
- 建造者模式以及php实现
建造者模式: 造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对 ...
- reveal.js让程序员做ppt也享受快乐
前言 程序员除了会写的一手漂亮的代码,也要求做出风格优雅的PPT,诸如向领导汇报工作.向小组成员反馈项目进展自己的工作等等.就本人而言,做ppt还要去找模板,还需要设计风格,内心是焦灼的.于是乎,我搜 ...
- Wamp搭建的服务器登录的时候出现Access denied for user 'hello'@'localhost' (using password: YES)
想用自己电脑做一个服务器,然后就选择了Wamp,本来一切顺利,可是到登录的时候却出现了问题,出现了 Access denied for user 'hello'@'localhost' (using ...
- 老潘 - ListView分析 - 学以致用篇(一)
ListView分析学以致用篇(1) 在我们查看别人的博客的时候,一个人是一个风格的.先说下我的风格,我喜欢思想类比,然后介绍知识,不太喜欢填鸭式的灌输.如果只是想单纯的从我的博客中直接看到代码,我个 ...