MBS7: MyBatis分页实现(SQL分页与Java分页)

本文介绍了MyBatis中两种常用的分页查询方法:limit分页和RowBounds分页。通过示例代码详细展示了如何在UserMapper接口和XML配置文件中实现分页查询,以及在测试类中调用这些接口进行分页数据的获取。对于limit分页,讲解了其语法和使用方式,而RowBounds则是一种通过Java对象实现的分页方式。
摘要由CSDN通过智能技术生成

7.1 简介

​ 目的是为了减少数据的访问量 ,减轻数据库的压力。

7.2 limit分页

7.2.1 语法

select * from 表名 startIndex,pageSize;

select * from 表名 pageSize;

提示: 如果使用时,表名之后只给定了一个pageSize参数,那么默认的语句是 select * from 表名 0,pagesize

7.2.2 使用

UserMapper:

package com.yun.dao;

import com.yun.pojo.User;

import java.util.List;
import java.util.Map;

public interface UserMapper {
    //分页查询
    List<User> getUserLimit(Map<String,Integer> map);
}

提示: 传递参数不一定要用map,也可以直接传递两个int过去。

UserMapper.xml:

<?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="com.yun.dao.UserMapper" >
        <resultMap id="userResultMap" type="user">
            <result column="gender" property="sex"/>
        </resultMap>
        
        <select id="getUserLimit" parameterType="Map" resultMap="userResultMap">
            select * from user limit #{startIndex},#{pageSize}
        </select>
    </mapper>

提示: 上述的 resultMap 是做了数据库与实体类之间的映射。

测试分页接口:

package com.yun.dao;

import com.yun.pojo.User;
import com.yun.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UserMapperTest {
    @Test
    public void userResultMapTest(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        
        Map<String,Integer> map = new HashMap<>();
        map.put("startIndex",0);
        map.put("pageSize",2);
        
        List<User> userList = userMapper.getUserLimit(map);

        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.close();
    }
}

7.3 RowBounds

7.3.1 简介

​ 前些年,有人钟爱于用java实现MYSQL语句,因此,我们可以使用RowBounds来实现分页。

7.3.2 代码

UserMapper:

package com.yun.dao;

import com.yun.pojo.User;

import java.util.List;
import java.util.Map;

public interface UserMapper {
    //RowBounds分页
    List<User> getUserListByRowBounds();
}

提示: 不需要传递参数。

UserMapper.xml:

<?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="com.yun.dao.UserMapper" >
        <select id="getUserListByRowBounds" resultMap="userResultMap">
            select * from user
        </select>
    </mapper>

测试分页接口:

package com.yun.dao;

import com.yun.pojo.User;
import com.yun.utils.MyBatisUtils;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UserMapperTest {
    @Test
    public void getUserListByRowBoundsTest(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        RowBounds rowBounds = new RowBounds(3,2);
        List<User> userList = sqlSession.selectList("com.yun.dao.UserMapper.getUserListByRowBounds",null,rowBounds);

        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.close();
    }
}

提示: RowBounds构造器需要传递的参数,跟limit的参数一模一样: new RowBounds(startIndex,pageSize) 。并且,selectList的第一个参数是绑定的方法,第二个参数未知,第三个则是RowBounds对象。selectList获取接口服务的方式,已经淘汰了。


当然,MyBatis有第三方插件,专注于分页:[点击这里](

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值