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. ...
随机推荐
- B - Burning Midnight Oil CodeForces - 165B
One day a highly important task was commissioned to Vasya — writing a program in a night. The progra ...
- 二进制流BinaryFormatter存储读取数据的细节测试
二进制流的使用很方便,为了更好的理解应用它,我创建简单对象开始测试它的增加特性和减少特性. [Serializable] class Data----------开始时候的存储对象 { public ...
- [转]mysql日志详细解析
转自:http://pangge.blog.51cto.com/6013757/1319304 MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据 ...
- jmeter正则表达式提取器使用
引用名称:请求中的参数需要引用的名称 正则表达式:从结果集中提取数据,例如从数据库查询结果中提取数据 模板:$1$表示提取表达式中的第一个值,$n$以此类推 匹配数字:0代表随机,1代表第一个值,n代 ...
- Android开发学习--RecycleView入门
该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView.GridView 通过设置它提供的不同LayoutManager,ItemDecoration , It ...
- [BZOJ1088][SCOI2005]扫雷Mine DP
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1088 记录下每一个格子对应左边格子放的雷的情况,然后dp转移就好了. #include&l ...
- 微信小程序之多行文本省略号
最近在捣鼓小程序,期间遇到的问题,踩过的坑,也是在网上各种搜.这里也说下我解决的问题,方便大家. 在小程序首页显示文本列表的时候,为了美观,不希望把所有的文本都显示出来,希望是显示前几行(比如前3行, ...
- Java线程-线程、程序、进程的基本概念
线程 与进程相似,但线程是一个比进程更小的执行单位.一个进程在其执行的过程中可以产生多个线程. 与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间 ...
- iOS Programming Subclassing UITableViewCell
iOS Programming Subclassing UITableViewCell 1.Creating BNRItemCell UITableViewCell is a UIView subc ...
- Python学习 Day 3 字符串 编码 list tuple 循环 dict set
字符串和编码 字符 ASCII Unicode UTF-8 A 1000001 00000000 01000001 1000001 中 x 01001110 00101101 11100100 101 ...