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. ...
随机推荐
- bzoj 3875: [Ahoi2014&Jsoi2014]骑士游戏【dp+spfa】
设f[i]为杀死i的最小代价,显然\( f[i]=min(k[i],s[i]+\sum f[to]) \) 但是这个东西有后效性,所以我们使用spfa来做,具体就是每更新一个f[i],就把能被它更新的 ...
- bzoj 1180: [CROATIAN2009]OTOCI【LCT】
一道几乎是板子的LCT,但是沉迷数学很久时候突然1A了这道题还是挺开心的 #include<iostream> #include<cstdio> using namespace ...
- bzoj3550: [ONTAK2010]Vacation(单纯形法+线性规划)
传送门 直接暴力把线性规划矩阵给打出来然后单纯形求解就行了 简单来说就是每个数记一个\(d_i\)表示选或不选,那么就是最大化\(\sum d_ic_i\),并满足一堆限制条件 然后不要忘记限制每个数 ...
- SSM-避坑记(一)
在运行测试类的时候的报错,内容如下 报错: class path resource [spring/spring-search.xml] cannot be opened because it doe ...
- C plus plus sprintf用法
sprintf int sprintf ( char * str, const char * format, ... ); Write formatted data to string Compose ...
- Saas物联网共享平台实战
什么是SaaS系统: 越来越多的软件,开始采用云服务. 云服务只是一个统称,可以分成三大类. IaaS:基础设施服务,Infrastructure-as-a-service PaaS:平台服务,Pla ...
- Multitenant best Practice clone pdb seed and Clone a Pluggable Database – 12c Edition
1. 1.Tnsnames when connecting to either Container or Pluggable instance The tnsnames.ora should be c ...
- Oracle本地动态 SQL
本地动态 SQL 首先我们应该了解什么是动态 SQL,在 Oracle数据库开发 PL/SQL块中我们使用的 SQL 分为:静态 SQL语句和动态 SQL语句.所谓静态 SQL指在 PL/SQL块中使 ...
- Oracle Mysql的jdbc连接
Oracle和MySql的jdbc或连接池中的连接,写下来以便随时参考 Oracle: driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc ...
- VS2012创建WebForm项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。
解决方案: 使用VS2012开发,都要装NuGet插件(官网:http://nuget.org),进官网点安装就进入了微软的下载页面, 选择vs2012版本的NuGet.Tools.vsix文件,双击 ...