4、mybatis数据分页【笔记】

分页

为什么要分页 ?

减少数据的处理

使用limit 实现分页 这就是先查出分页数据。

select *
from mybatis.user
limit 3;

使用mybatis实现分页,核心sql

1、接口

//    分页
    List<User> getUserByLimit(Map<String, Integer> map);

2、Mapper.xml

 <!--    分页查询-->
    <select id="getUserByLimit" parameterType="map" resultType="User">
        select *
        from mybatis.user
        limit #{startIndex},#{pageSize}
    </select>

3、测试

  //测试使用limit实现分页
    @Test
    public void getUserByLimit() {
        SqlSession sqlSession = mybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        HashMap<String, Integer> map = new HashMap<>();
        map.put("startIndex", 0);//起始索引
        map.put("pageSize", 2);//页面大小
        List<User> userByLimit = mapper.getUserByLimit(map);
        for (User user : userByLimit) {
            System.out.println(user);
        }
        sqlSession.close();
    }

4、测试结果

image-20210621013921272

RowBounds分页

这就是先查出来所有的数据在进行分页

1、接口

 //    分页2
    List<User> getUserByRowBounds();

2、mapper.xml

    <!--    分页查询2-->
    <select id="getUserByRowBounds" resultType="User">
        select *
        from mybatis.user
    </select>

3、测试

 //按照行边界 分页
    @Test
    public void getUserByRowBounds() {
        SqlSession sqlSession = mybatisUtils.getSqlSession();

        //RowBounds实现分页
        RowBounds rowBounds = new RowBounds(1, 2);
        //通过java代码实现分页
        List<Object> selectList = sqlSession.selectList("com.q.dao.UserMapper.getUserByRowBounds", null, rowBounds);
        for (Object o : selectList) {
            System.out.println(o);
        }
        sqlSession.close();
    }

分页插件

(前端分页是查询了全部的数据,然后再进行分页)

https://blog.csdn.net/qq_37939251/article/details/82916019

第一步:导入分页插件

<!--        pagehelper分页插件-->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.11</version>
</dependency>

第二步:就是配置分页插件,使得分页插件部署到数据库里面,然后可以进行使用 在sqlsession工厂里面配置的

<!--        3.4配置分页插件,使mybatis的分页插件可以使用-->
<property name="plugins">
    <array>
        <!--  作用就是,当执行查询持久化操作的时候,修改sql语句              -->
        <bean class="com.github.pagehelper.PageInterceptor">
            <property name="properties" value="helperDialect=mysql"/>
        </bean>
    </array>
</property>

第三步:在业务层添加分页的接口 【传递两个参数,当前页码和每一页的页数】

List<Books> queryAllBookByPage(int page, int pageSize);

第四步:编写业务逻辑类

@Override
public List<Books> queryAllBookByPage(int page, int pageSize) {
    //开启分页支持
    PageHelper.startPage(page, pageSize);
    //调用dao层查询所有
    List<Books> books = bookMapper.queryAllBook();
    //获取分页的相关信息
    PageInfo<Books> info = new PageInfo<>(books);
    System.out.println("获取当前页:"+info.getPageNum());
    System.out.println("获取每一页的页数"+info.getPageSize());
    System.out.println("获取当总页数:"+info.getPages());
    System.out.println("获取总记录数"+info.getTotal());
    System.out.println("获取第一页"+info.getNavigateFirstPage());
    System.out.println("获取最后一页"+info.getNavigateLastPage());
    System.out.println("获取上一页"+info.getPrePage());
    System.out.println("获取下一页"+info.getNextPage());
    System.out.println("获取当前页数据"+info.getList().size());
    return books;
}

第五步:进行测试

public class test {
    @Test
    public void queryAllBookByPage() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookServiceImpl bookServiceImpl = applicationContext.getBean("bookServiceImpl", BookServiceImpl.class);
        bookServiceImpl.queryAllBookByPage(1, 4);
    }
}

前端获取分页数据的方式:

<div align="center"> 

   <font size="2">第 ${page.pageNum} 页,共${page.pages}页,${page.total} 条记录</font> <a href="list.do?page=1">首页</a> 

    <c:choose> 

        <c:when test="${page.pageNum - 1 > 0}"> 

            <a href="list.do?page=${page.pageNum - 1}">上一页</a> 

        </c:when> 

        <c:when test="${page.pageNum - 1 <= 0}"> 

            <a href="list.do?page=1">上一页</a> 

        </c:when> 

    </c:choose> 

    <c:choose> 

        <c:when test="${page.pages==0}"> 

            <a href="list.do?page=${page.pageNum}">下一页</a> 

        </c:when> 

        <c:when test="${page.pageNum + 1 < page.pages}"> 

            <a href="list.do?page=${page.pageNum + 1}">下一页</a> 

        </c:when> 

        <c:when test="${page.pageNum + 1 >= page.pages}"> 

            <a href="list.do?page=${page.pages}">下一页</a> 

        </c:when> 

    </c:choose> 

    <c:choose> 

        <c:when test="${page.pages==0}"> 

            <a href="list.do?page=${page.pageNum}">尾页</a> 

        </c:when> 

        <c:otherwise> 

            <a href="list.do?page=${page.pages}">尾页</a> 

        </c:otherwise> 

    </c:choose> 

</div> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值