【mybatis】实现分页查询

news2024/11/26 4:52:54

一 .使用原生分页器的实体类

        1.1 java代码部分

                方法多  不易书写

package cn.bdqn.entity;

public class Page {
    private Integer pageIndex;//页码

    private Integer pageSize;//页大小  显示多少行数据

    private Integer totalCounts;//数据的总行数

    private Integer totalPages;//总页数

    private Integer startRows;//起始行

    private String sname="";
    private String grade="";

    private String sex="";

    public Page() {
    }

    public Page(Integer pageIndex) {
        this(pageIndex, 7);
    }

    public Page(Integer pageIndex, Integer pageSize, Integer totalCounts, Integer totalPages, Integer startRows, String snane, String sex, String grade) {
        this.pageIndex = pageIndex;
        this.pageSize = pageSize;
        this.totalCounts = totalCounts;
        this.totalPages = totalPages;
        this.startRows = startRows;
        this.sname = sname;
        this.sex = sex;
        this.grade = grade;
    }

    public Page(Integer pageIndex, Integer pageSize) {
        this.pageIndex = pageIndex;
        this.pageSize = pageSize;
        this.setStartRows((pageIndex - 1) * pageSize);
    }

    public Integer getPageIndex() {
        return pageIndex;
    }

    public void setPageIndex(Integer pageIndex) {
        this.pageIndex = pageIndex;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getTotalCounts(int count) {
        return totalCounts;
    }

    public void setTotalCounts(Integer totalCounts) {
        this.totalCounts = totalCounts;

        this.setTotalPages(totalCounts % pageSize == 0 ? totalCounts / pageSize : totalCounts / pageSize + 1);
    }

    public Integer getTotalPages() {
        return totalPages;
    }

    public void setTotalPages(Integer totalPages) {
        this.totalPages = totalPages;
    }

    public Integer getStartRows() {
        return startRows;
    }

    public void setStartRows(Integer startRows) {
        this.startRows = startRows;
    }

//    public int getPageNum() {
//        return pageNum;
//    }
//


    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }


    public String getSex() {
        return sex;
    }

    public void setSex(String grade) {
        this.sex = sex;
    }
//    @Override
//    public String toString() {
//        return "Page{" +
//                "pageIndex=" + pageIndex +
//                ", pageSize=" + pageSize +
//                ", totalCounts=" + totalCounts +
//                ", totalPages=" + totalPages +
//                ", startRows=" + startRows +
//                '}';
//    }


    @Override
    public String toString() {
        return "Page{" +
                "pageIndex=" + pageIndex +
                ", pageSize=" + pageSize +
                ", totalCounts=" + totalCounts +
                ", totalPages=" + totalPages +
                ", startRows=" + startRows +
                ", sname='" + sname + '\'' +
                ", sex='" + sex + '\'' +
                ", grade='" + grade + '\'' +
                '}';
    }
}

        1.2 在动态jsp页面中    用forEach  书写

<div class="a-run">
    <a href="<c:url context='${pageContext.request.contextPath}' value='/ServletScoreShow?pageIndex=1'/>">首页</a>

    <c:if test="${page.pageIndex > 1}">
        <a href="<c:url context='${pageContext.request.contextPath}' value='/ServletScoreShow?pageIndex=${page.pageIndex - 1}' />">上一页</a>
    </c:if>
    <c:if test="${page.pageIndex == 1}">
        <a>上一页</a>
    </c:if>


    <c:if test="${page.pageIndex < page.totalPages}">
        <a href="<c:url context='${pageContext.request.contextPath}' value='/ServletScoreShow?pageIndex=${page.pageIndex + 1}'/>">下一页</a>
    </c:if>
    <c:if test="${page.pageIndex == page.totalPages}">
        <a>下一页</a>
    </c:if>

    <a href="<c:url context='${pageContext.request.contextPath}' value='/ServletScoreShow?pageIndex=${page.totalPages}'/>">尾页</a>

</div>

 二 . 使用mybatis  分页

             2.1.1  在pom.xml文件中引入依赖

       

 <!--引入分页插件-->
  <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.3.2</version>
  </dependency>
</dependencies>

                2.1.2  在mybatis.xml中   设定标签(注意标签书写顺序)

<!--配置mybatis分页插件-->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

三 . 测试类代码

package cn.sy;

import cn.sy.entity.User;
import cn.sy.mapper.UserMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestPageHelper {

    SqlSessionFactory factory = null;

    @Before
    public void init() {

        try {
            InputStream resourceAsStream = Resources.getResourceAsStream("config/mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test(){
        SqlSession sqlSession = factory.openSession(true);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //pageNum : 分的页数  pageSize: 每页显示的记录数
        PageHelper.startPage(3,3);
        List<User> users = mapper.selectList();

        for (User user : users) {
            System.out.println("user = " + user);
        }

        // 创建分页信息对象  获取更多的分页信息
        PageInfo<User> userPageInfo = new PageInfo<>(users);

        // 获取分页的详细信息

        List<User> list = userPageInfo.getList();

        System.out.println("list = " + list);

        long total = userPageInfo.getTotal();

        System.out.println("total = " + total);

        System.out.println("*********************");

        System.out.println("userPageInfo = " + userPageInfo);


    }
}

         

 

                 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker安装部署dragonfly2镜像加速服务

Dragonfly安装部署文档 ​ Dragonfly 作为龙蜥社区的镜像加速标准解决方案&#xff0c;是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率&#xff0c;最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。 …

鸟哥的Linux私房菜读书笔记:Linux磁盘与文件系统管理

系统管理员很重要的任务之一就是管理好自己的磁盘文件系统&#xff0c; 每个分区不可太大也不能太小&#xff0c; 太大会造成磁盘容量的浪费&#xff0c; 太小则会产生文件无法储存的困扰。 前面谈到的文件权限与属性中&#xff0c; 这些权限与属性分别记录在文件系统的哪个区块…

[Golang实战]如何快速接入chatgpt/openai?[引入go-gpt3][新手开箱可用]

如何快速接入chatgpt?[引入go-gpt3]上文介绍了如何在网页使用chatgpt?V1.介绍下在golang中使用chatgpt?1.查看官网推荐的chatgpt项目2.访问go-gpt33.使用并运行在自己的项目中...(是因为例子很难理解,所以一一对应了属性做了配置)3.1安装项目3.2换上自己的代码3.3换上自己的…

LeetCode - 1109 - 航班预定统计

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 1109. 航班预订统计 - 力扣&#xff08;LeetCode&#xff09; 题目描述 这里有 n 个航班&#xff0c;它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings &#xff0c;表中第 i 条预订记录 bookin…

【C语言】BCD码、十进制互相转换

目录 0. 前言&#xff1a; 1. BCD码 2. 算法原理 3. 进制转换 3.1 两位BCD码的转换&#xff1a; 3.2 其他进制转换 3.3 任意进制转二进制 参考资料&#xff1a; 0. 前言&#xff1a; 记录今天用15单片机写DS1302时钟芯片程序的时候遇到的问题 时间显示是这个样的 0 1…

电源浪涌保护器的演化发展与未来创新方向

随着科学信息技术和城市经济的发展&#xff0c;感应雷、电磁脉冲和雷电波浸入所造成的危害大大增加。一般建筑物的外部防雷措施只能预防直击雷&#xff0c;而强大的电磁场产生的感应雷和脉冲电压却能潜入室内危及电路上的设备。如今通讯网络、电脑仪器和各类用电设备越来越精密…

2023VR视频加密解决方案

如今VR技术在各个领域中的使用&#xff0c;使得我们在日常生活中也可以看到它的身影&#xff0c;常见的就是应用到培训、影院和游戏当中&#xff0c;我们都知道VR视频比传统的平面视频能给用户带来更好的体验&#xff0c;而且现在在教育、娱乐等领域VR类视频也越来越多。相比于…

运动基元(二):贝塞尔曲线

贝塞尔曲线是我第一个深入接触并使用于路径规划的运动基元。N阶贝塞尔曲线具有很多优良的特性,例如端点性、N阶可导性、对称性、曲率连续性、凸包性、几何不变性、仿射不变性以及变差缩减性。本章主要介绍贝塞尔曲线用于运动基元时几个特别有用的特性。 一、贝塞尔曲线的定义 …

C++复习笔记4

编译器给一个类默认生成的六个成员函数&#xff1a; 构造函数、析构函数、拷贝构造函数、赋值运算符重载、对象取地址运算符以及常对象取地址运算符。其中析构函数不能重载&#xff0c;默认的拷贝和赋值两个函数存在浅拷贝的问题。 对象取地址运算符重载和常对象取地址运算符…

KD03丨选品种-横截面动量

大家好&#xff0c;今天我们分享可达鸭系列第3篇策略——横截面动量。 想必这种逻辑大家也都熟悉&#xff0c;为了照顾大部分新人朋友&#xff0c;开始还是简单介绍一下该该逻辑理论。 横截面是一种非时序动量逻辑&#xff0c;从统计学感性描述&#xff08;非严谨客观描述&am…

windows安装PaddleSpeech(无需visual studio)

前言 首先啊&#xff0c;狠狠的批评一下paddle&#xff0c;不想看请直接跳到用法&#xff0c;另外我python版本是3.9&#xff0c;所以包找的也都是3.9。 1.分成许多子项目涵盖AI的不同领域&#xff0c;初心是好&#xff0c;安装起来得安装多个环境。 2.官方文档推荐linux安装&…

anaconda详细介绍、安装及使用(python)

anaconda详细介绍、安装及使用1 介绍1.1 简介1.2 特点1.3 版本下载2 Anaconda管理Python包命令3 安装3.1 windows安装4 操作4.1 Conda 操作4.2 Anaconda Navigator 操作4.3 Spyder 操作4.4 Jupyter Notebook 操作5 示例参考1 介绍 1.1 简介 Anaconda是用于科学计算&#xff08…

力扣sql简单篇练习(十四)

力扣sql简单篇练习(十四) 1 银行账户概要|| 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 高于相当于大于的意思 SELECT u.name,t.balance FROM Users u INNER JOIN (SELECT account,sum(amount) balanceFROM TransactionsGROUP BY accountHAVIN…

Kafka入门(四)

下面尝试一下Kafka 的生产者客户端和消费者客户端的实现。 1、客户端简介 生产者就是负责向Kafka发送消息的应用程序&#xff0c;消费者就是拉取Kafka消息的应用程序。 在Kafka的历史版本中&#xff0c;主要的客户端如下&#xff1a; 基于Scala语言编写的客户端&#xff0c;称…

JAVA工具篇--3 maven项目转gradle项目

前言&#xff1a;将已有的Maven 项目转换为Gradle 项目&#xff1b; 1 项目转换&#xff1a; 1.1 winr 打开cmd命令窗口, 然后进入到maven项目根目录后&#xff0c;输入命令: gradle init --info --type pom1.2 选择构建的语言&#xff1a; 输入 1 然后回车&#xff1b; 1.3…

Rust编码的信息窃取恶意软件源代码公布,专家警告已被利用

黑客论坛上发布了一个 用Rust编码的信息窃取恶意软件源代码 &#xff0c;安全分析师警告&#xff0c;该恶意软件已被积极用于攻击。 该恶意软件的开发者称&#xff0c;仅用6个小时就开发完成&#xff0c;相当隐蔽&#xff0c; VirusTotal的检测率约为22% 。 恶意软件开发者在…

canal使用说明:MySQL、Redis实时数据同步

1. canal简介 canal是阿里开源的数据同步工具&#xff0c;基于bin log可以将数据库同步到其他各类数据库中&#xff0c;目标数据库支持mysql,postgresql,oracle,redis,MQ,ES等 canal分成服务端deployer和客户端adapter&#xff0c;我们可以部署多个&#xff0c;同时为了方便管…

AssertionError: 618 columns passed, passed data had 508 columns【已解决】

问题描述 程序中断&#xff0c;报错如下AssertionError: 618 columns passed, passed data had 508 columns Exception has occurred: ValueError 618 columns passed, passed data had 508 columns AssertionError: 618 columns passed, passed data had 508 columnsThe abo…

< CSDN周赛解析:第 27 期 >

CSDN周赛解析&#xff1a;第 27 期&#x1f449; 前言&#x1f449; 第一题&#xff1a; 幸运数字> 解析> 解决方案> 拓展知识&#x1f449; 第二题&#xff1a; 投篮> 解析> 解决方案&#x1f449; 第三题&#xff1a; 通货膨胀-x国货币> 解析> 解决方案…

数字展陈技术,让珍贵馆藏资源走出深闺

这篇文章来自于笔者2017年发表在《档案时空》第12期的一篇文章&#xff0c;原名为《数字展陈技术在档案展览中的应用》。 档案时空 时隔5年&#xff0c;数字视觉技术的发展突飞猛进&#xff0c;特别是这两年元宇宙浪潮席卷全球&#xff0c;VR/AR/MR技术的综合应用给受众带来非一…