解决mybatis-plus不能俩表联查分页之手动写分页

news2024/11/23 21:38:52
public class MyPageHelper {

    // 调用pageInfo插件内的方法 开启分页 需要传入一个起始页的值和每页显示的条数
    public static void startPage(PageRequest pageRequest) {
        PageHelper.startPage(pageRequest.getPageNum(),pageRequest.getPageSize());
    }

    // 封装结果集
    public static PageResult getPageResult(List content) {
        // 创建分页对象 将结果传入对象中 pageInfo对象中生成信息
        PageInfo pageInfo = new PageInfo<>(content);
        // 创建返回的对象
        PageResult pageResult = new PageResult();
        // 获取总页数
        pageResult.setTotal(pageInfo.getTotal());
        // 获取结果
        pageResult.setContent(pageInfo.getList());
        // 获取总页数
        pageResult.setPages(pageInfo.getPages());
        // 获取起始页数
        pageResult.setPageNum(pageInfo.getPageNum());
        // 获取每页显示的条数
        pageResult.setPageSize(pageInfo.getPageSize());
        // 返回结果
        return pageResult;
    }

}

public class PageRequest {

    /**
     *页数
     */
    private int pageNum;
    /**
     * 每页的信息的个数
     */
    private int pageSize;


    public PageRequest() {
    }

    public PageRequest(int pageNum, int pageSize) {
        this.pageNum = pageNum;
        this.pageSize = pageSize;
    }

    /**
     * 获取
     * @return pageNum
     */
    public int getPageNum() {
        return pageNum;
    }

    /**
     * 设置
     * @param pageNum
     */
    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    /**
     * 获取
     * @return pageSize
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 设置
     * @param pageSize
     */
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public String toString() {
        return "PageRequest{pageNum = " + pageNum + ", pageSize = " + pageSize + "}";
    }
}

public class PageResult {

        /**
         *页数
         */
        private int pageNum;
        /**
         * 每页的信息的个数
         */
        private int pageSize;
        /**
         * 总条数
         */
        private Long total;
        /**
         * 总页数
         */
        private int pages;
        /**
         * 结果集
         */
        private List<?> content;

    public PageResult() {
    }

    public PageResult(int pageNum, int pageSize, Long total, int pages, List<?> content) {
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.total = total;
        this.pages = pages;
        this.content = content;
    }

    /**
         * 返回结果调用的方法
         */
        public static PageResult getPageResult(List content,PageRequest pageRequest,Long total) {
            // 创建返回的对象
            PageResult pageResult = new PageResult();
            // 将分页后查询到的结果放入对象中
            pageResult.setContent(content);
            // 将起始页放入对象中
            pageResult.setPageNum(pageRequest.getPageNum());
            // 将每页显示的条数放入对象中
            pageResult.setPageSize(pageRequest.getPageSize());
            // 将总条数放入对象中
            pageResult.setTotal(total);
            // 返回结果
            return pageResult;
        }


    /**
     * 获取
     * @return pageNum
     */
    public int getPageNum() {
        return pageNum;
    }

    /**
     * 设置
     * @param pageNum
     */
    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    /**
     * 获取
     * @return pageSize
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 设置
     * @param pageSize
     */
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 获取
     * @return total
     */
    public Long getTotal() {
        return total;
    }

    /**
     * 设置
     * @param total
     */
    public void setTotal(Long total) {
        this.total = total;
    }

    /**
     * 获取
     * @return pages
     */
    public int getPages() {
        return pages;
    }

    /**
     * 设置
     * @param pages
     */
    public void setPages(int pages) {
        this.pages = pages;
    }

    /**
     * 获取
     * @return content
     */
    public List<?> getContent() {
        return content;
    }

    /**
     * 设置
     * @param content
     */
    public void setContent(List<?> content) {
        this.content = content;
    }

    public String toString() {
        return "PageResult{pageNum = " + pageNum + ", pageSize = " + pageSize + ", total = " + total + ", pages = " + pages + ", content = " + content + "}";
    }
}

 

 三个实体类写完了后,接下来就是mapper层的编写


@Mapper
public interface StudentDao extends BaseMapper<Student> {


List<Student> selectAllChd(PageRequest pageRequest);


}

 service的编写与实现类的编写


public interface StudentService  extends IService<Student> {

    List<Student> selectAllChd(PageRequest pageRequest);

}

@Service
public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> implements StudentService  {

    @Resource
    StudentDao studentDao;

    @Override
    public List<Student> selectAllChd(PageRequest pageRequest) {
        return studentDao.selectAllChd(pageRequest);
    }
}

 


 再接着是controller的编写


@GetMapping("/query")
@ResponseBody
public PageResult queryList() {//分页写出来了

    System.out.println("进来了query");

    PageRequest pageRequest=new PageRequest(1,3);

    int pageNum = pageRequest.getPageNum();

    pageRequest.setPageNum((pageRequest.getPageSize()*(pageRequest.getPageNum()-1)));

    List<Student> carManagerEntityList =studentService.selectAllChd(pageRequest);

    pageRequest.setPageNum(pageNum);

    Long total = studentService.count();

    return PageResult.getPageResult(carManagerEntityList,pageRequest,total);
}

mybatis-plus虽然使用起来方便,但是俩表映射就不能使用自带的分页了,所以需要小伙伴自己手动写,下面是映射语句


<resultMap type="com.cskt.entity.Student" id="StudentMap">
    <result property="sId" column="s_id" jdbcType="INTEGER"/>
    <result property="sName" column="s_name" jdbcType="VARCHAR"/>
    <result property="sSex" column="s_sex" jdbcType="VARCHAR"/>
    <association property="sClass" resultMap="ClassMap"></association>
</resultMap>

<resultMap id="ClassMap" type="com.cskt.entity.StuClass">
    <id property="cId" column="c_id"></id>
    <result property="cName" column="c_name"></result>
</resultMap>

<select id="selectAllChd" resultMap="StudentMap">
    SELECT * FROM `student` as stu  join stu_class    as sts  on  stu.s_class=sts.c_id   limit #{pageNum} ,#{pageSize}
</select>

 


项目结构如下



查询效果如下,分页成功,并且俩表映射成功,希望可以帮助到各位小伙伴


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

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

相关文章

从零开始的PICO开发教程(4)-- VR世界 射线传送、旋转和移动

从零开始的PICO开发教程&#xff08;4&#xff09;-- VR世界 射线传送、旋转和移动 文章目录 从零开始的PICO开发教程&#xff08;4&#xff09;-- VR世界 射线传送、旋转和移动一、前言1、大纲 二、VR射线移动功能实现与解析1、区域传送&#xff08;1&#xff09;新建 XR Orig…

linux下使用crontab定时器,并且设置定时不执行的情况,附:项目启动遇到的一些问题和命令

打开终端&#xff0c;以root用户身份登录。 运行以下命令打开cron任务编辑器&#xff1a; crontab -e 如果首次编辑cron任务&#xff0c;会提示选择编辑器。选择你熟悉的编辑器&#xff0c;比如nano或vi&#xff0c;并打开相应的配置文件。 在编辑器中&#xff0c;添加一行类…

SpringMVC工程之非web部分代码复用,并独立运行

文章目录 概述一、独立运行前提二、实现步骤1. WebApplicationContext上下文配置文件定义2.servletContext上下文配置文件3. 定义独立运行的类main方法4. 开发环境运行main结果5. class文件运行6. jar运行&#xff08;推荐&#xff09; 概述 springMVC是位于spring web端的一个…

BeanFactory和ApplicationContext功能

IDEA中双击shift&#xff0c;搜索一切 使用ctrl f12打开当前文件的结构图&#xff0c;显示了当前文件的层次结构&#xff0c;包括类、方法、变量等。 BeanFactory接口功能 表面上只有getBean实际上IOC、DI、以及Bean的生命周期的各种功能&#xff0c;都有其实现类&#xff08…

视频讲解|1033含sop的配电网重构(含风光可多时段拓展)

目录 1 主要内容 程序特点 讲解重点 2 视频链接 1 主要内容 该视频为含sop的配电网重构matlab代码讲解&#xff0c;对应资源下载链接为含sop的配电网重构&#xff08;含风光|可多时段拓展&#xff09;&#xff0c;程序主要内容是&#xff1a;针对含sop的配电网重构模型&…

【AI】推理引擎的模型转换模块

在推理引擎架构中&#xff0c;API 接口下来就是模型转换&#xff0c;狭义的模型转换是指将各种框架的模型转换为统一的格式&#xff0c;即模型格式转换&#xff1b;广义的模型转换则还包括图优化部分&#xff0c;因为不同的框架提供的算子不同&#xff0c;且类型太多&#xff0…

强大的 HTTP 请求工具:axios 打造前后端通信利器 | 开源日报 0916

axios/axios Stars: 101.2k License: MIT axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;适用于浏览器和 node.js。 它具有以下核心优势&#xff1a; 支持在浏览器中进行 XMLHttpRequest在 node.js 中发起 http 请求支持 Promise API拦截请求和响应&#xff0c;并对数…

rust String 和 str 区别

1 String / &String String 类型的变量本质是一个存放在栈上的胖指针&#xff08;当然调用过程中&#xff0c;不用显示地按指针那样处理&#xff09;&#xff0c;共有三个字段&#xff1a; 1 pointer: 指向实际字符串值的地址&#xff0c;值是存放在堆上可变字节缓冲区&a…

驱动开发,stm32mp157a开发板的led灯控制实验(优化),使用ioctl函数,让write/read函数的专注读写功能

1.实验目的 编写LED灯的驱动&#xff0c;在应用程序中编写控制LED灯亮灭的代码逻辑实现LED灯功能的控制&#xff1b; 2.LED灯相关寄存器分析 LED1->PE10 LED1亮灭&#xff1a; RCC寄存器[4]->1 0X50000A28 GPIOE_MODER[21:20]->01 (输出) 0X50006000 GPIOE_ODR[10]-&g…

【Redis7】--3.Redis持久化

Redis持久化 Redis持久化(Redis persistence)是指将数据写入持久化存储&#xff0c;如固态硬盘(SSD) Redis提供了一系列持久化选项&#xff0c;这些包括&#xff1a; RDB(redis数据库)&#xff1a;RDB持久化方式能够在指定的时间间隔对数据进行快照存储AOF(追加文件)&#x…

java写一个用于生成雪花id的工具类

我们创建一个类 叫 SnowflakeIdGenerator 作为生成雪花id的工具类 然后 编写代码如下 public class SnowflakeIdGenerator {private static final long START_TIMESTAMP 1609459200000L; // 设置起始时间戳&#xff0c;可以根据需要进行调整private static final long WORKER…

助力新消费行业“三品”战略,从构建企业身份基础设施开始|身份云研究院

随着工业和信息化部、商务部等五部门联合发布《数字化助力消费品工业“三品”行动方案&#xff08;2022-2025年&#xff09;》&#xff08;以下简称《方案》&#xff09;逐步推行&#xff0c;加速实施数字化助力消费品工业“三品”战略成为消费行业重点任务&#xff0c;其中三品…

基于SpringbootShiro实现的CAS单点登录

概述 单点登录&#xff08;Single Sign On,SSO&#xff09;是一种登录管理机制&#xff0c;主要用于多系统集成&#xff0c;即在多个系统中&#xff0c;用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个&#xff0c;无须多次登录。常见的例子就是&#xff0c;…

java 封装一个将String类型转Long类型的函数

Long是一种超大类型的数字变量类型 但java无法直接生成这种数据 但我们可以封装一个函数 public Long getuniid(String number) {Long longNumber Long.parseLong(number);return longNumber; }这样 我们就可以传入一个字符串 然后将其转换为 long 然后我们调用这个函数 Sys…

Linux之ASCII码表查询tools(五十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

浅谈C++|类的成员

一.类对象作为类成员 类可以作为另一个类的成员 代码&#xff1a; #include <iostream> using namespace std; class phone { public:string shouji;phone(string shouji1) :shouji(shouji1) {cout << "phone的构造函数调用" << endl;}~phone() …

Obsidian配置

插件 1&#xff1a;Annotator pdf批注插件&#xff0c;使用方法&#xff1a;新建一个markdown文件&#xff0c;在文件的头部必须时开头添加以下内容&#xff1a; --- annotation-target: xxx.pdf ---2&#xff1a;Hidden Folder 用正则表达式隐藏文件夹的&#xff0c;我的设…

Spring实例化源码解析(一)

invokeBeanFactoryPostProcessors 前言 AbstractApplicationContext类的refresh方法是spring实例化流程的开始。本章主要是介绍invokeBeanFactoryPostProcessors(beanFactory)方法&#xff0c;对其内部源码进行详细分析。接下来就来看看这句简单的代码后面具体做了什么。Spri…

SpringSecurity学习 - 认证和授权

一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与SpringSecurity&#xff0c;Shiro的上手更加的简单。 一般Web应用的需要进行认证和授权。 认证&#xff1a;验证当前访问系统的是不是本系统的用户&#xff0c;并且要…

C语言实现通讯录 (附完整代码)

C语言实现通讯录 &#x1f340;实现一个通讯录&#xff1a;&#x1f340;通讯录的功能&#xff1a;&#x1f340;多文件实现&#x1f4ae;设计结构体——保存人的信息&#x1f4ae;初始通讯录&#x1f4ae;封装通讯录&#x1f4ae;define宏定义修改通讯录的最大容量初始化通讯录…