mybatis分页查询如何实现?实现方式整理

你知道mybatis的分页查询有哪几种实现方式吗?具体是怎样去实现的呢?下面就是要给大家详细的介绍一下这方面的问题。

这里的话分别总结了mybatis5种实现分页查询的方法:

UserMapper.java接口文件

public interface UserMapper
{
    //分页查询
    public List < User > selectForPage1(int startIndex, int pageSize);
    public List < User > selectForPage2(Map < String, Object > map);
    public Integer selectCount();
    public List < User > selectForPage3(PageBean pageBean);
    //分页加模糊查询
    public Integer selectCount2(String keywords);
    public List < User > selectForPage4(Map < String, Object > map);
}

工具类PageBean.java

public class PageBean
{
    private Integer currentPage;
    private Integer startIndex;
    private Integer pageSize = 5;
    private Integer totalCount;
    private Integer totalPage;
    public Integer getCurrentPage()
    {
        return currentPage;
    }
    public void setCurrentPage(Integer currentPage)
    {
        this.currentPage = currentPage;
        this.startIndex = (this.currentPage - 1) * this.pageSize;
    }
    public Integer getPageSize()
    {
        return pageSize;
    }
    public void setPageSize(Integer pageSize)
    {
        this.pageSize = pageSize;
    }
    public Integer getTotalCount()
    {
        return totalCount;
    }
    public void setTotalCount(Integer totalCount)
    {
        this.totalCount = totalCount;
        //计算总页数
        this.totalPage = (int) Math.ceil((this.totalCount * 1.0 / this.pageSize));
    }
    public Integer getTotalPage()
    {
        return totalPage;
    }
    public void setTotalPage(Integer totalPage)
    {
        this.totalPage = totalPage;
    }
    public Integer getStartIndex()
    {
        return startIndex;
    }
    public void setStartIndex(Integer startIndex)
    {
        this.startIndex = startIndex;
    }
}

UserMapper.xml文件

在这当中,查询5是模糊加分页查询语句

<?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">
<!-- namespace和Mapper接口类名字一样 -->
<mapper namespace="com.gx.mapper.UserMapper">
    <!-- 查询1 -->
    <select id="selectForPage1" resultType="User">
        select * from user limit #{param1},#{param2}
    </select>
    <!-- 查询2-->
    <select id="selectForPage2" resultType="User">
        select * from user limit #{startIndex},#{pageSize}
    </select>
    <!-- 查询3-->
    <select id="selectAll" resultType="User">
        select * from user
    </select>
    <!-- 查询总条数-->
    <select id="selectCount" resultType="java.lang.Integer">
        select count(*) from user
    </select>
    <!-- 查询4-->
    <select id="selectForPage3" resultType="User">
        select * from user limit  #{startIndex},#{pageSize}
    </select>
    <!-- 查询5-->
    <select id="selectForPage4" resultType="User">
        select * from user
        where name like "%"#{keywords}"%" or address like "%"#{keywords}"%"
         limit  #{startIndex},#{pageSize}
    </select>
    <!-- 模糊查询查询总条数-->
    <select id="selectCount2" resultType="java.lang.Integer" parameterType="java.lang.String">
        select count(*) from user where name like "%"#{value}"%" or address like "%"#{value}"%"
    </select>
</mapper>

测试test

在这当中,方法6是模糊加分页查询测试

public class myTest {
 
    SqlSession session = MyBatisUtils.openSession();
    UserMapper userMapper = session.getMapper(UserMapper.class);
     
    @Test
    public void selectForPage1() {
        int currentPage=1;
        int pageSize=5;
        List
<User> selectForPage = userMapper.selectForPage1((currentPage-1)*pageSize, pageSize);
        for (User user : selectForPage) {
            System.out.println(user);
        }
        MyBatisUtils.closeSession(session);
    }
     
    @Test
    public void selectForPage2() {
        int currentPage=1;
        int pageSize=5;
        Map
    <String , Object> map=new HashMap<>();
        map.put("startIndex", (currentPage-1)*pageSize);
        map.put("pageSize", pageSize);
        List
        <User> selectForPage = userMapper.selectForPage2(map);
        for (User user : selectForPage) {
            System.out.println(user);
        }
        MyBatisUtils.closeSession(session);
    }
 
    @Test
    public void selectForPage3() {
        int currentPage=1;
        int pageSize=5;
        /**
         * 参数1:开始条 偏移量,下标
         * 参数2:参数总条数
         */
        RowBounds rowBounds = new RowBounds((currentPage-1)*pageSize, pageSize);
        //使用mybatis里面提供的api去写的
        List
            <User> list = session.selectList("com.gx.mapper.UserMapper.selectAll", null, rowBounds);
        for (User user : list) {
            System.out.println(user);
        }
        MyBatisUtils.closeSession(session);
    }
     
    @Test
    public void selectForPage4() {
        Integer count = userMapper.selectCount();
        System.out.println(count);
        int currentPage=1;
        int pageSize=5;
        Map
                <String , Object> map=new HashMap<>();
        map.put("startIndex", (currentPage-1)*pageSize);
        map.put("pageSize", pageSize);
        List
                    <User> list = userMapper.selectForPage2(map);
        for (User user : list) {
            System.out.println(user);
        }
        System.out.println("当前第"+currentPage+"页,共"+count+"条");
        MyBatisUtils.closeSession(session);
    }
     
    @Test
    public void selectForPage5() {
        PageBean bean = new PageBean();
        bean.setCurrentPage(1);
        bean.setPageSize(5);
        //查询总条数
        Integer count = userMapper.selectCount();
        //放到pageBean
        bean.setTotalCount(count);
        List
                        <User> list = userMapper.selectForPage3(bean);
        for (User user : list) {
            System.out.println(user);
        }
        System.out.println("当前第"+bean.getCurrentPage()+"页,共"+count+"条");
        MyBatisUtils.closeSession(session);
    }
     
    @Test
    public void selectForPage6() {
        String keywords="云6";
        PageBean bean = new PageBean();
        bean.setCurrentPage(1);
        bean.setPageSize(5);
        //查询总条数
        Integer count = userMapper.selectCount2(keywords);
        //放到pageBean
        bean.setTotalCount(count);
        Map
                            <String , Object> map = new HashMap<>();
        map.put("startIndex", bean.getStartIndex());
        map.put("pageSize", bean.getPageSize());
        map.put("keywords", keywords);
        List
                                <User> list = userMapper.selectForPage4(map);
        for (User user : list) {
            System.out.println(user);
        }
        System.out.println("当前第"+bean.getCurrentPage()+"页,共"+count+"条");
        MyBatisUtils.closeSession(session);
    }
     
}

之前也给大家介绍过mybatis分页插件实现的相关内容,感兴趣的朋友可以去了解一下,除此之外,请多多的关注奇Q工具网吧,更多java常见问题及解决方法可以为你分享呢。

推荐阅读:

mybatis plus分页怎么做?如何实现?

mybatis分页如何实现?有几种常用分页方式?

mybatis逆向工程详解,什么是逆向工程?