mybatis plus实现多表分页条件查询

文章目录

  • 前言
  • 一、
  • 二、如何实现
    • 1 配置mybatis plus分页插件
    • 2.准备三张表
      • 2.1 学生表
      • 2.2 老师表
      • 2.3 老师和学生Vo表
    • 3. 编写SQL语句
    • 4. 编写mapper层
    • 5. service层
    • 6.controller层
    • 演示效果
  • 【补充】 XML 自定义分页
  • 总结


前言

没啥可说的

一、

没啥可说的

二、如何实现

1 配置mybatis plus分页插件

@Configuration
@MapperScan("com.breez.vote.mapper")
public class MybatispluConfig {/*** 配置分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

2.准备三张表

2.1 学生表

@Data
@TableName("student")
public class Student implements Serializable {private Integer id;private String studentName;private Integer studentAge;
}

2.2 老师表

@Data
@TableName("teacher")
public class Teacher implements Serializable {private Integer id;private String teacherName;private Integer teacherAge;
}

2.3 老师和学生Vo表

💡这张表的数据来自老师和学生,用来保存来自多张表的数据。

/*** 学生和老师*/
@Data
public class QueryVo implements Serializable {/*** 学生名字*/private String studentName;/*** 学生年龄*/private Integer studentAge;/*** 老师姓名*/private String teacherName;/*** 老师年龄*/private Integer teacherAge;
}

3. 编写SQL语句

💡这里需要注意:写完SQL语句后,需要在结尾加上${ew.customSqlSegment},查询参数,由mybatis plus自动拼装。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.breez.vote.mapper.StudentMapper"><select id="findByPage" resultType="com.breez.vote.domain.vo.QueryVo">select * from student,teacher  ${ew.customSqlSegment}</select></mapper>

4. 编写mapper层

public interface StudentMapper extends BaseMapper<Student> {/***自定义分页条件查询* @param page 分页参数* @param wrapper 查询参数* @return*/IPage<QueryVo> findByPage(IPage<QueryVo> page, @Param(Constants.WRAPPER) QueryWrapper<QueryVo> wrapper);
}

5. service层

public interface StudentService extends IService<Student> {/**** @param page 分页参数* @param queryWrapper 查询条件* @return 分页后的数据*/public IPage<QueryVo> findByPage(Page<QueryVo> page, QueryWrapper<QueryVo> queryWrapper);}
@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {@Resourceprivate StudentMapper queryMapper;/*** @param page         分页参数* @param queryWrapper 查询条件* @return 分页后的数据*/@Overridepublic IPage<QueryVo> findByPage(Page<QueryVo> page, QueryWrapper<QueryVo> queryWrapper) {return queryMapper.findByPage(page, queryWrapper);}
}

6.controller层

@RestController
@RequestMapping("data")
public class StudentController {@Autowiredprivate StudentService studentService;@GetMapping("query")public Object query() {Page<QueryVo> page = new Page<>(1, 2);IPage<QueryVo> queryVoPage = studentService.findByPage(page, new QueryWrapper<>());return queryVoPage;}
}

演示效果

✏️学生表【4条数据】
在这里插入图片描述


✏️ 老师表【3条数据】
在这里插入图片描述

💡这里出现这个结果原因(出现了12条数据【3*4=12】)是我没有在SQL语句中写多表查询条件,出现了笛卡尔积,加上多表查询条件后就不会出现相同的了(李刚)。

在这里插入图片描述

【补充】 XML 自定义分页

  • UserMapper.java 方法内容
public interface UserMapper {//可以继承或者不继承BaseMapper/*** <p>* 查询 : 根据state状态查询用户列表,分页显示* </p>** @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)* @param state 状态* @return 分页对象*/IPage<User> selectPageVo(Page<?> page, Integer state);
}
  • UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页
<select id="selectPageVo" resultType="com.baomidou.cloud.entity.UserVo">SELECT id,name FROM user WHERE state=#{state}
</select>
  • UserServiceImpl.java 调用分页方法
public IPage<User> selectUserPage(Page<User> page, Integer state) {// 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分// page.setOptimizeCountSql(false);// 当 total 为小于 0 或者设置 setSearchCount(false) 分页插件不会进行 count 查询// 要点!! 分页返回的对象与传入的对象是同一个return userMapper.selectPageVo(page, state);
}

总结

📖
一个字: 巴适

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

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

相关文章

神仙在双11晚上,都干了些啥?

11月&#xff0c;阿里巴巴西溪园区夜凉如水&#xff0c;双11作战室内&#xff0c;却有人身着短袖衬衫&#xff0c;只见她屏住呼吸&#xff0c;握紧微微出汗的手心&#xff0c;静静立于数字大屏前&#xff0c;等待今年最重要的一个数据。 距离双11结束&#xff0c;还有1分钟。 …

nginx(windows环境安装)

介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;并在一个BSD-like 协议下发行。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好。 文章…

“编程能力差的程序员,90%输在了这点上!”谷歌AI专家:都是瞎努力!

我见过市面上很多的 Python和人工智能的教程和书籍&#xff0c;他们大都这样讲的&#xff1a;先从 Python 人工智能的发展历史开始&#xff0c;介绍的基本语法规则&#xff0c;Python 的 list, dict, tuple 等数据结构&#xff0c;然后再介绍机器学习、深度学习的常用框架等等&…

阿里巴巴的云原生应用开源探索与实践

导读&#xff1a;从拥抱开源、贡献开源、自主开源&#xff0c;到赋能开源&#xff0c;开源已升级为阿里技术战略之一&#xff0c;且正为开发者源源不断地输送切实可见的价值。云原生是阿里开源的重要领域&#xff0c;短短几年&#xff0c;以 K8s 为核心的云原生开源生态迅猛发展…

RuoYi-Vue 部署 Linux环境 若依前后端分离项目(war 包+nginx版本)

文章目录一、软件安装部署1. 安装jdk2. mysql8安装部署3. redis安装4. nginx 安装部署5. Tomcat10 下载和配置 Linux 环境6. 克隆项目二、后端项目2.1. 修改数据库连接2.2. 修改Redis连接信息2.3. 文件路径2.4. 日志存储路径调整2.5. 修改war打包2.6. 编译打包三、前端项目3.1.…

技术直播:讲一个Python编写监控程序的小故事

今年疫情“黑天鹅”事件改变了大家的生活。相信大家都经历过&#xff0c;每天早晨起床第一件事&#xff0c;就是查看数据。这些数据不仅仅是人们对活着的渴望&#xff0c;也是在建立对战胜疫情的决心。那么技术人怎么能通过自己所学的去进行数据监控呢&#xff1f;今天CSDN邀请…

高精地图中地面标识识别技术历程与实践

导读&#xff1a;本文将主要介绍高德在高精地图地面标识识别上的技术演进&#xff0c;这些技术手段在不同时期服务了高精地图产线需求&#xff0c;为高德地图构建高精度地图提供了基础的技术保证。 1.面标识识别 地面标识识别&#xff0c;指在地图道路中识别出各种类型的地面…

RuoYi-Cloud 部署篇_04(windows环境 mysql+nginx版本)

文章目录一、nginx 操作流程1. nginx 安装启动2. nginx 配置3. nginx 重新启动二、前端项目编译2.1. 前端编译打包2.2. 静态复制迁移三、后端项目启动2.1. 我启动了6个服务2.2. 测试验证一、nginx 操作流程 1. nginx 安装启动 nginx&#xff08;windows环境安装&#xff09; …

从P4到P9, 在马云家写代码到双11前端PM

阿里妹导读&#xff1a;今年的双11已经是阿里资深前端技术专家舒文来阿里的第11年&#xff0c;从应届生到双11前端PM&#xff0c;他一路升级打怪&#xff0c;实现了岗位上从P4到P9的晋升。这第11届双11顺利结束之际&#xff0c;他把在阿里这些年的成长经历做一个总结和分享&…

在Java虚拟机上班是一种怎样的体验?

来源 | 编程技术宇宙责编| Carol封图 | CSDN 下载自视觉中国本文用知乎体的风格简单介绍了JVM中几个内置线程的工作&#xff0c;希望对大家学习JVM有一点帮助。匿名用户JVM老鸟228 人赞同了该回答利益相关&#xff0c;匿了&#xff01;JVM公司里面线程众多&#xff0c;派系林立…

微服务架构四大金刚利器

概述 互联网应用发展到今天&#xff0c;从单体应用架构到SOA以及今天的微服务&#xff0c;随着微服务化的不断升级进化&#xff0c;服务和服务之间的稳定性变得越来越重要&#xff0c;分布式系统之所以复杂&#xff0c;主要原因是分布式系统需要考虑到网络的延时和不可靠&…

RuoYi-Cloud 部署篇_01(linux环境 Oracle +nginx版本)

文章目录一、基础准备1. 技术选型2. 源码克隆3. 安装依赖4. 安装oracle5. 安装启动Mysql6. 安装启动Redis7. 创建数据库&#xff0c;执行 SQL脚本文件二、安装与配置 nacos2.1. 下载nacos2.2. 安装 nacos2.3. nacos持久化配置2.4. 执行脚本文件2.5. nacos连接 mysql 配置信息2.…

当60亿次攻击来袭,人机联合打了一场漂亮的防御战

云是大规模体量下各种小概率事件常态化的一个复杂场&#xff0c;云上的攻防对抗是攻击者和防御者在这张复杂场上的博弈与演化。大规模的环境之中充斥着各种各样转瞬即逝的信息&#xff0c;对于威胁&#xff0c;没有什么是比「大规模」和「转瞬即逝」还更好的隐匿与庇护。任何一…

RuoYi-Cloud 部署篇_02(linux环境 Oracle +nginx版本)

文章目录一、模块配置修改1. ruoyi-gateway-dev.yml2. ruoyi-auth-dev.yml3. ruoyi-system-dev.yml4. ruoyi-gen-dev.yml5. ruoyi-job-dev.yml6. ruoyi-file-dev.yml二、后端配置预启动2.1. 部署资料整合2.2. 模块端口划分2.3. 组件端口划分2.4. 服务脚本编写2.5. 前端编译生产…

一个多业务、多状态、多操作的交易链路?闲鱼架构这样演进

前言 双十一刚刚结束&#xff0c;成交额2684亿震惊全世界&#xff0c;每秒订单峰值达54.4W笔。在闲鱼2000万DAU&#xff0c;交易数额同样增长迅速的今天&#xff0c;我们如何保障交易链路的稳定与快速支撑业务&#xff1f;这篇文章从客户端开发的角度&#xff0c;介绍闲鱼交易…

RuoYi-Cloud 部署篇_03(linux环境 Oracle +nginx版本)

请参考RuoYi-Cloud 分布式部署_03&#xff08;linux环境 Mysqlnginxredis版本&#xff09;

没想到 Google 排名第一的编程语言,为什么会这么火?

没想到吧&#xff0c;Python 又拿第一了&#xff01; 在 Google 公布的编程语言流行指数中&#xff0c;Python 依旧是全球范围内最受欢迎的技术语言&#xff01;01为什么 Python 会这么火&#xff1f;核心还是因为企业需要用它&#xff01;因为其易用、逻辑简单并拥有海量扩展包…

写1行代码影响1000000000人,这是个什么项目?

不带钱不带卡&#xff0c;只带手机出门就能畅行无阻&#xff0c;这已是生活的常态。益普索发布的《2019第一季度第三方移动支付用户研究》报告显示&#xff0c;移动支付在手机网民中的渗透率高达95.1%&#xff0c;截至今年1月&#xff0c;支付宝全球用户数已经突破10亿。你或许…

高德客户端及引擎技术架构演进与思考

2019杭州云栖大会上&#xff0c;高德地图技术团队向与会者分享了包括视觉与机器智能、路线规划、场景化/精细化定位、时空数据应用、亿级流量架构演进等多个出行技术领域的热门话题。现场火爆&#xff0c;听众反响强烈。我们把其中的优秀演讲内容整理成文并陆续发布出来&#x…

免费直播:主流深度框架对比:总有一款适合你~

常常有小伙伴在后台反馈&#xff1a;想了解深度学习该怎么学&#xff1f;自学难度大又没有效果&#xff0c;该怎么办&#xff1f;CSDN为了解决这个难题&#xff0c;联合唐宇迪老师为大家带来了一场精彩的直播【一节课掌握深度学习必备框架】。本次直播将带大家了解在开始深度学…