mybatis - [13] 分页
题记部分
001 || limit
select * from mybatis.user limit 2,5;
- 2代表偏移量,从结果集的第3行开始。
- 5代表返回的记录数
UserMapper
List<User> getUserByLimit(Map<String,Integer> map);
UserMapper.xml
<select id="getUserByLimit" parameterType="map" resultType="com.harley.pojo.User">
select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
测试类
package com.harley.mapper;
import com.harley.dao.UserMapper;
import com.harley.pojo.User;
import com.harley.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
/**
* @author harley
* @since 2025-02-15 20:19:43
*/
public class UserDaoTest {
static Logger logger = Logger.getLogger(UserDaoTest.class);
// 第一步: 获得SqlSession对象
SqlSession sqlSession;
UserMapper userMapper;
@Before
public void init(){
logger.info("初始化连接...");
sqlSession = MybatisUtils.getSqlSession();
userMapper = sqlSession.getMapper(UserMapper.class);
}
@Test
public void getUserByLimit(){
HashMap<String,Integer> map = new HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("startIndex",0);
map.put("pageSize",2);
List<User> userList = userMapper.getUserByLimit(map);
for (User user: userList){
System.out.println(user);
}
}
@After
public void close(){
logger.info("关闭数据库连接...");
sqlSession.close();
}
}
002 || RowBounds分页
step1: UserMapper
List<User> getUserByRowBounds();
step2: UserMapper.xml
<resultMap id="UserMap" type="com.harley.pojo.User">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="pwd" property="password"/>
</resultMap>
<select id="getUserByRowBounds" resultMap="UserMap">
select * from mybatis.user
</select>
step3: test
package com.harley.mapper;
import com.harley.dao.UserMapper;
import com.harley.pojo.User;
import com.harley.utils.MybatisUtils;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
/**
* @author harley
* @since 2025-02-15 20:19:43
*/
public class UserDaoTest {
static Logger logger = Logger.getLogger(UserDaoTest.class);
// 获得SqlSession对象
SqlSession sqlSession;
@Before
public void init(){
logger.info("初始化连接...");
sqlSession = MybatisUtils.getSqlSession();
}
@Test
public void getUserByRowBounds(){
RowBounds rowBounds = new RowBounds(1, 2);
List<User> userList = sqlSession.selectList("com.harley.dao.UserMapper.getUserByRowBounds", null, rowBounds);
for (User user : userList) {
System.out.println(user);
}
}
@After
public void close(){
logger.info("关闭数据库连接...");
sqlSession.close();
}
}
003 || PageHelper
step1: 引入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
step2: 配置PageHelper
application.properties
# 设置数据库方言,根据实际使用的数据库进行修改
pagehelper.helper-dialect=mysql
# 启用合理化查询,如果页码小于 1 则返回第一页,如果页码大于总页数则返回最后一页
pagehelper.reasonable=true
# 支持通过 Mapper 接口参数来传递分页参数
pagehelper.support-methods-arguments=true
application.yml
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
step3: 使用
(1)实体类
public class User{
private Long id;
private String name;
private Integer age;
}
(2)Mapper接口
@Mapper
public interface UserMapper{
List<User> findAllUsers();
}
(3)Service层
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public PageInfo<User> getUsersByPage(int pageNum, int pageSize) {
// 开启分页功能,pageNum 表示当前页码,pageSize 表示每页显示的记录数
PageHelper.startPage(pageNum, pageSize);
// 执行查询操作
List<User> userList = userMapper.findAllUsers();
// 将查询结果封装到 PageInfo 对象中
return new PageInfo<>(userList);
}
}
(4)Controller层
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public PageInfo<User> getUsers(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize) {
return userService.getUsersByPage(pageNum, pageSize);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?