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.rhkb.cn/news/299514.html

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

相关文章

施耐德中高端PLC仿真器

参考文档&#xff1a;《Unity Pro PLC 仿真器》EIO0000001719.06 &#xff08;Control Expert 就是 Unity Pro 最新版本换了个名字&#xff0c;两者操作基本相同&#xff09; https://www.schneider-electric.cn/zh/download/document/EIO0000001719/ 1. 适用 PLC 这里使用的…

TiDB 组件 GC 原理及常见问题

本文详细介绍了 TiDB 的 Garbage Collection&#xff08;GC&#xff09;机制及其在 TiDB 组件中的实现原理和常见问题排查方法。 TiDB 底层使用单机存储引擎 RocksDB&#xff0c;并通过 MVCC 机制&#xff0c;基于 RocksDB 实现了分布式存储引擎 TiKV&#xff0c;以支持高可用分…

计算机网络——37认证

认证 目标&#xff1a;Bob需要Alice证明他的身份 Protocol ap1.0&#xff1a;Alice说"A am Alice" 可能出现的问题&#xff1a; 在网络上Bob看不到Alice&#xff0c;因此Trudy可以简单的声称他是Alice 认证&#xff1a;重新尝试 Protocol ap2.0&#xff1a;Alice…

阿里云4核8G服务器ECS通用算力型u1实例优惠价格

阿里云4核8G服务器优惠价格955元一年&#xff0c;配置为ECS通用算力型u1实例&#xff08;ecs.u1-c1m2.xlarge&#xff09;4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选&#xff0c;CPU采用Intel(R) Xeon(R) Platinum处理器&#xff0c;阿里云活动链接 aliyunfuwuq…

批量导入svg文件作为图标使用(vue3)vite-plugin-svg-icons插件的具体应用

目录 需求svg使用简述插件使用简述实现安装插件1、配置vite.config.ts2、src/main.ts引入注册脚本3、写个icon组件4、使用组件 需求 在vue3项目中&#xff0c;需要批量导入某个文件夹内数量不确定的svg文件用来作为图标&#xff0c;开发完成后能够通过增减文件夹内的svg文件&a…

一文解析智慧城市,人工智能技术将成“智”理主要手段

长期以来&#xff0c;有关智慧城市的讨论主要围绕在技术进步方面&#xff0c;如自动化、人工智能、数据的公开以及将更多的传感器嵌入城市以使其更加智能化。实际上&#xff0c;智慧城市是一个关于未来的设想&#xff0c;其重要原因在于城市中存在各种基础设施、政治、地理、财…

测试框架pytest学习与实践

pytest是一个专业的测试框架&#xff0c;可以帮助我们对python项目进行测试&#xff0c;提高测试的效率。 pytest官网手册&#xff1a;pytest: helps you write better programs — pytest documentation 中文手册&#xff1a;Pytest 教程 入门学习 安装pytest pip install…

代码随想录算法训练营第二十五天| 216.组合总和III、17.电话号码的字母组合

系列文章目录 目录 系列文章目录216.组合总和III17.电话号码的字母组合回溯法 216.组合总和III 本题k相当于树的深度&#xff0c;9&#xff08;因为整个集合就是9个数&#xff09;就是树的宽度。 剪枝&#xff1a;①for循环的范围剪枝&#xff0c;i < 9 - (k - path.size()…

Mac资源库的东西可以删除吗?mac资源库在哪里打开 cleanmymacx是什么 cleanmymac免费下载

在使用Mac电脑的过程中&#xff0c;用户可能会遇到存储空间不足的问题。一种解决方法是清理不必要的文件&#xff0c;其中资源库&#xff08;Library&#xff09;文件夹是一个常被提及但又让人迷惑的目标。Mac资源库的东西可以删除吗&#xff1f;本文旨在解释Mac资源库的作用、…

卫星遥感影像如何选择合适的分辨率

​ 卫星遥感影像的分辨率是影响其应用效果的关键因素之一。分辨率越高&#xff0c;所获取的图像细节越丰富&#xff0c;能够更准确地反映地物的特征和变化。因此&#xff0c;在选择卫星遥感影像时&#xff0c;需要根据实际需求和数据可获取性来选择合适的分辨率。 一、分辨…

Python向带有SSL/TSL认证服务器发送网络请求小实践(附并发http请求实现asyncio+aiohttp)

1. 写在前面 最近工作中遇到这样的一个场景&#xff1a;给客户发送文件的时候&#xff0c;为保证整个过程中&#xff0c;文件不会被篡改&#xff0c;需要在发送文件之间&#xff0c; 对发送的文件进行签名&#xff0c; 而整个签名系统是另外一个团队做的&#xff0c; 提供了一…

AI大语言模型GPT —— R 生态环境领域数据统计分析

自2022年GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型的发布以来&#xff0c;它以其卓越的自然语言处理能力和广泛的应用潜力&#xff0c;在学术界和工业界掀起了一场革命。在短短一年多的时间里&#xff0c;GPT已经在多个领域展现出其独特的价值…

数据挖掘入门项目二手交易车价格预测之建模调参

文章目录 目标步骤1. 调整数据类型&#xff0c;减少数据在内存中占用的空间2. 使用线性回归来简单建模3. 五折交叉验证4. 模拟真实业务情况5. 绘制学习率曲线与验证曲线6. 嵌入式特征选择6. 非线性模型7. 模型调参&#xff08;1&#xff09; 贪心调参&#xff08;2&#xff09;…

C++从入门到精通——初步认识面向对象及类的引入

初步认识面向对象及类的引入 前言一、面向过程和面向对象初步认识C语言C 二、类的引入C的类名代表什么示例 C与C语言的struct的比较成员函数访问权限继承默认构造函数默认成员初始化结构体大小 总结 前言 面向过程注重任务的流程和控制&#xff0c;适合简单任务和流程固定的场…

电商技术揭秘八:搜索引擎中的SEO内部链接建设与外部推广策略

文章目录 引言一、 内部链接结构优化1.1 清晰的导航链接1. 简洁明了的菜单项2. 逻辑性的布局3. 避免深层次的目录结构4. 使用文本链接5. 突出当前位置6. 移动设备兼容性 1.2 面包屑导航1. 显示当前页面位置2. 可点击的链接3. 简洁性4. 适当的分隔符5. 响应式设计6. 避免重复主页…

c# wpf XmlDataProvider 简单试验

1.概要 2.代码 <Window x:Class"WpfApp2.Window12"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend…

Debian12 使用 nginx 与 php8.2 使用 Nextcloud

最近将小服务器升级了下系统&#xff0c;使用了 debian12 的版本&#xff0c;正好试试 nginx 和 php-fpm 这种方式运行 Nextcloud 这个私有云的配置。 一、基本系统及应用安装 系统&#xff1a;debian12 x86_64 位版本最小安装&#xff0c;安装后可根据自己需求安装一些工具&…

《图解Vue3.0》- 调试

如何对vue3项目进行调试 调试是开发过程中必备的一项技能&#xff0c;掌握了这项技能&#xff0c;可以很好的定义bug所在。一般在开发vue3项目时&#xff0c;有三种方式。 代码中添加debugger;使用浏览器调试&#xff1a;sourcemap需启用vs code 调试&#xff1a;先开启node服…

python标准数据类型--集合常用方法

在Python中&#xff0c;集合&#xff08;Set&#xff09;是一种无序且不重复的数据结构&#xff0c;它是由一个无序的、不重复的元素组成的。Python中的集合与数学中的集合概念相似&#xff0c;并且支持一系列常用的方法。本篇博客将深入介绍Python集合的常用方法&#xff0c;帮…

《QT实用小工具·十五》多种样式的开关控件

1、概述 源码放在文章末尾 目前实现了三种样式的开关控件按钮&#xff0c;如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef IMAGESWITCH_H #define IMAGESWITCH_H/*** 图片开关控件 * 1. 自带三种开关按钮样式。* 2. 可自定义开关图片。*/#include <QWid…