springboot之mybatisPlus多表查询及分页查询

文章目录

  • 一、多表查询
  • 二、mybatis-plus条件查询
  • 三、分页查询

一、多表查询

可能会用到的注解

在这里插入图片描述

这里的场景是,查询每个用户及其所有的订单。就是查询你的id号的同时,把你所有的历史订单信息都拉出来。

表结构这样

CREATE TABLE User (  id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(255) NOT NULL,  password VARCHAR(255) NOT NULL,  birthday VARCHAR(10)
);INSERT INTO User (id, username, password, birthday) VALUES  
(1, 'Alice', 'password123', '1990-01-01'),  
(2, 'Bob', 'pass456word', '1992-05-10'),
(4, 'Bob', 'pass456word', '1992-05-10'),
(3, 'Bob', 'pass456word', '1992-05-10'),
(5, 'Bob', 'pass456word', '1992-05-10'),
(6, 'Bob', 'pass456word', '1992-05-10');CREATE TABLE t_order (  id INT PRIMARY KEY AUTO_INCREMENT,  order_time VARCHAR(255) NOT NULL,  total double NOT NULL,  uid INT NOT NULL );INSERT INTO t_order (order_time, total, uid) VALUES   
('2023-04-01 00:00:00', 100.00, 1),  
('2023-04-01 00:00:00', 100.00, 1),  
('2023-04-01 00:00:00', 100.00, 2),  
('2023-04-01 00:00:00', 100.00, 3);

具体的流程呢是在User里面加一个List<Order>,这个很好理解每个用户需要有多个订单嘛,使用一个列表来接受很合理。
在这里插入图片描述
在UserMapper里面写一下方法,很好理解id、username、password、birthday都需要映射到对应类的里的字段column代表表里面字段,property代表类里面的字段.。主要是最后的那个many,是要将表里面的id通过selectByUid的返回结果映射到orders中。这个selectById是要我们自己写的。路径不能写错哦。

@Select("select * from User")//使用Results注解后,所有字段都要手动映射@Results({@Result(column = "id",property = "id"),@Result(column = "username",property = "username"),@Result(column = "password",property = "password"),@Result(column = "birthday",property = "birthday"),@Result(column="id",property = "orders", javaType = List.class,many = @Many(select = "com.example.hello.mapper.OrderMapper.selectByUid"))//使用表里的字段id映射为orders:根据用户的id查找订单。将id传递给selectByUid。})List<User> selectAllUserAndOrders();
@Select("select * from t_order where uid=#{uid}")List<Order> selectByUid(int uid);

然后在controller写调用selectAllUserAndOrders的接口即可。

@GetMapping("/user/findall")public List<User> find(){return userMapper.selectAllUserAndOrders();}

在这里插入图片描述


反过来说,我如果希望查询所有订单及对应的用户,其实直接在OrderMapper里面编写Results映射即可,只不过一个订单只对应一个用户所以要使用one接收,在将uid传入到UserMapper的selectById,在OrderBean里面增加一个User成员变量存放即可。

@GetMapping("/order/findall")public List<Order> findall(){List<Order> orders = orderMapper.selectAllOrdersandUser();return orders;}
@Select("select * from t_order")@Results({@Result(column = "id",property = "id"),@Result(column = "ordertime",property = "ordertime"),@Result(column = "total",property = "total"),@Result(column = "uid",property = "user",javaType = User.class,one =@One(select="com.example.hello.mapper.UserMapper2.selectById"))})List<Order> selectAllOrdersandUser();
 @Select("select * from User where id = #{id}")User selectById(int id);

在这里插入图片描述

注意:如果中间遇到什么问题,尝试一步一步找错误,是不是数据库建立的有问题,注解上面写好的执行语句能不能再sql里面正常执行

二、mybatis-plus条件查询

例如常见的字段等于、大于、小于。mybatis-plus提供了很多模板,我这里举一个例子官网

我要查询username是我输入进来的所有行

@GetMapping("/user/find/{username}")public List<User> findByCond(@PathVariable String username){System.out.println(username);System.out.println("*---------*");QueryWrapper<User> queryWrapper = new QueryWrapper();queryWrapper.eq("username",username);return userMapper.selectList(queryWrapper);}

三、分页查询

使用mybatisPlus实现分页查询,很实用的一个东西。
首先配置好Config文件

@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor paginationInterceptor(){MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);interceptor.addInnerInterceptor(paginationInnerInterceptor);return interceptor;}
}

在controller中定义分页查询接口。其中current和size分别代表当前页数和每页是多少条数据。selectPage方法中第一个第二个参数需要通过构造QueryWrapper传入即可,也可以直接传入null表示select *。

@GetMapping("/user/findbypage/{current}/{size}")public IPage findByPage(@PathVariable int current,@PathVariable int size){Page<User> page = new Page<>(current,size);QueryWrapper<User> queryWrapper = new QueryWrapper();queryWrapper.eq("username","Bob");IPage iPage = userMapper.selectPage(page,queryWrapper);return iPage;}

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

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

相关文章

音视频开发之旅(83)- 腾讯音乐开源高质量唇形同步模型--MuseTalk

目录 1.效果展示 2.原理学习 3.流程分析 4.资料 一、效果展示 -- &#xff08;推理素材来源于网络&#xff0c;如有侵权&#xff0c;联系立删&#xff01;&#xff09; 唱歌效果&#xff08;歌曲有suno生成&#xff09; 用于推理的视频素材来源于网络&#xff0c;如有侵权&…

基于R语言lavaan结构方程模型(SEM)技术应用

结构方程模型&#xff08;Sructural Equation Modeling&#xff0c;SEM&#xff09;是分析系统内变量间的相互关系的利器&#xff0c;可通过图形化方式清晰展示系统中多变量因果关系网&#xff0c;具有强大的数据分析功能和广泛的适用性&#xff0c;是近年来生态、进化、环境、…

lua学习笔记7(函数的学习)

print("*****************************函数的学习*******************************") print("*****************************无参数无返回值函数的学习*******************************") function f1()print("f1函数") end f1() f2function()--…

《价值》-张磊-高瓴资本-4(下)-三个投资哲学:“守正用奇”“弱水三千,但取一瓢”“桃李不言,下自成蹊”。

我常用三句古文来概括它们&#xff1a;“守正用奇”“弱水三千&#xff0c;但取一瓢”“桃李不言&#xff0c;下自成蹊”。 守正用奇 “守正用奇”是从老子的《道德经》中总结出来的表述。老子说“以正治国&#xff0c;以奇用兵”&#xff0c;即以清净的正道来治理国家&#xf…

Transformer模型-add norm(残差连接归一化)的简明介绍

今天介绍transformer模型的add & norm&#xff08;残差连接&归一化&#xff09; add代表残差连接&#xff08;Residual Connection&#xff09; 残差连接是一种跳过连接,它将输入添加到网络的中间层或输出上。 **残差连接&#xff08;Residual Connection&#xff09;…

ffmpeg 将多个视频片段合成一个视频

ffmpeg 将多个视频片段合成一个视频 References 网络视频 6 分钟的诅咒。 新建文本文件 filelist.txt filelist.txtfile output_train_video_0.mp4 file output_train_video_1.mp4 file output_train_video_2.mp4 file output_train_video_3.mp4 file output_train_video_4.m…

Qt之信号和槽的机制

前言 在 C 中&#xff0c;对象与对象之间产生联系要通过调用成员函数的方式。但是在 Qt中&#xff0c;Qt提供了一种新的对象间的通信方式&#xff0c;即信号和槽机制。在GUI编程中&#xff0c;通常希望一个窗口部件的一个状态的变化会被另一个窗口部件知道&#xff0c;为…

我做的小程序,一下流量就爆了【小游戏:你对颜色敏感吗】

大家好&#xff0c;我是鬼哥&#xff0c;一位8年前端从业者&#xff0c;也是一位全栈开发&独立开发者&#xff0c; 最近有点浮躁&#xff0c;可笑的是2024年已经过去一个季度了&#xff0c;我今年的目标貌似都还没正式开始。 本来去年下半年计划今年开始&#xff0c;正式运…

2024.4.1-[作业记录]-day06-认识 CSS(三大特性、引入方式)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; day06-认识 CSS(三大特性、引入方式) 文章目录 day06-认识 CSS(三大特性、引入方式)作业…

Apache Log4j2 Jndi RCE CVE-2021-44228漏洞原理讲解

Apache Log4j2 Jndi RCE CVE-2021-44228漏洞原理讲解 一、什么是Log4j2二、环境搭建三、简单使用Log4j2四、JDNI和RMI4.1、启动一个RMI服务端4.2、启动一个RMI客户端4.3、ldap 五、漏洞复现六、Python批量检测 参考视频&#xff1a;https://www.bilibili.com/video/BV1mZ4y1D7K…

01.IDEA中出现Cannot resolve symbol ‘SpringApplication异常

试了很多次&#xff0c;看了这篇文章终于发现了问题。IDEA解决springboot工程中Cannot resolve symbol SpringApplication异常-CSDN博客 我存在的问题在于Maven home path有误&#xff0c;改正之后就没有问题&#xff0c;不标红了。

三子棋游戏----C语言版【超级详细 + 视频演示 + 完整源码】

㊙️小明博客主页&#xff1a;➡️ 敲键盘的小明 ㊙️ ✅关注小明了解更多知识☝️ 文章目录 前言一、三子棋的实现思路二、三子棋的实现步骤2.1 先显示游戏的菜单2.2 游戏的具体实现2.2.1 棋盘的初始化2.2.2 展示棋盘2.2.3 下棋&#x1f534;玩家下棋&#x1f534;电脑下棋2.2…