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);
    }
}

 

 

 

 

 

 

 

 

 

posted @   HOUHUILIN  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示