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

news2024/11/18 16:50:32

文章目录

  • 一、多表查询
  • 二、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 {
    @Bean
    public 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.coloradmin.cn/o/1573456.html

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

相关文章

Pytorch数据结构:GPU加速

文章目录 一、GPU加速1. 检查GPU可用性&#xff1a;2. GPU不可用需要具体查看问题3. 指定设备4.将张量和模型转移到GPU5.执行计算&#xff1a;6.将结果转移回CPU 二、转移原理1. 数据和模型的存储2. 数据传输3. 计算执行4. 设备管理5.小结 三、to方法的参数类型 一、GPU加速 .…

Jetson nano部署Yolov8 安装Archiconda3+创建pytorch环境(详细教程+错误解决)

由于jetson nano 是aarch64架构&#xff0c;Anaconda官方不支持aarch64架构&#xff0c;所以有了一个叫“Archiconda”&#xff0c;其目的就是将conda移植到aarch64平台上 一. 下载地址Releases Archiconda/build-tools GitHub 然后安装archiconda bash Archiconda3-0.2.3…

stm32 HAL中断GPIO——1

1选择引脚为中断 中断详细配置 1 模式选择 上拉下拉 再点击NVIC可进行分组 再勾选如图 总结步骤 1选择中断 2配置时钟//选择外部时钟 3配置模式 4勾选NVIC

绝地求生:2024工资杯S2D2:单日前五队伍瓜分吃鸡,CCG暂居积分总榜首!

2024工资杯S2第二天小组赛结束&#xff0c;今日场上吃鸡和分数被CCG、17、AVG、PeRo、CTG这五支队伍瓜分&#xff0c;在XDD回归后&#xff0c;PeRo更是打出了单场20杀吃鸡大分局。 目前CCG以122分暂居小组积分榜首&#xff0c;AVG、MNG紧随其后&#xff0c;明日BC组&#xff0c…

【Linux】shell 脚本基础使用

在终端中输入命令可以完成一些常用的操作&#xff0c;但是我们都是一条一条输入命令&#xff0c;比较麻烦&#xff0c;为了解决这个问题&#xff0c;就会涉及到 shell 脚本&#xff0c;它可以将很多条命令放到一个文件里面&#xff0c;然后直接运行这个文件即可。 shell 脚本类…

STM32使用HAL库获取GPS模块HT1818Z3G5L信息(方法1)

1、写在最前 先了解一下GPRMC的格式 格 式&#xff1a; GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A*50 说 明&#xff1a; 字段 0&#xff1a;$GPRMC&#xff0c;语句ID&#xff0c;表明该语句为Recommended Minimum Specific GPS/TRANSIT Data&…

【服务器部署篇】Linux下安装Docker容器

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

计算机网络——37认证

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

继电器线圈两端为什么要反向并联二极管

原理描述&#xff1a; 电感的特点&#xff1a;穿过电感的电流不会突然变化&#xff0c;也就是说变化的电流在电感上面会产生感应电动势。 感应电动势的作用&#xff1a;阻碍电流的变化。 三极管断开之前&#xff0c;电流是穿过线圈&#xff0c;原来的电流是从上往下流动&#…

自定义实现shell/bash

文章目录 函数和进程之间的相似性shell打印提示符&#xff0c;以及获取用户输入分割用户的输入判断是否是内建命令执行相关的命令 全部代码 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#…

数据结构和算法:分治

分治算法 分治&#xff08;divide and conquer&#xff09;&#xff0c;全称分而治之&#xff0c;是一种非常重要且常见的算法策略。分治通常基于递归实现&#xff0c;包括“分”和“治”两个步骤。 1.分&#xff08;划分阶段&#xff09;&#xff1a;递归地将原问题分解为两个…

C语言自定义类型变量——枚举(enum)

一.枚举的定义和声明 字面意思&#xff0c;枚举就是一一列举&#xff0c;把可能的取值一一列举&#xff0c;在我们现实生活中有许多可以列举的事物&#xff0c;例如&#xff1a;一周七天&#xff0c;一年四季&#xff0c;性别&#xff0c;月份&#xff0c;三原色等等。当我们需…

vim美化配置(懒人版)

文章目录 配置vim&#xff08;懒人版&#xff09;1.搜索资源2.安装3.自定义缩进4.卸载方法 配置vim&#xff08;懒人版&#xff09; 1.搜索资源 打开gitee&#xff0c;注意到上面的搜索框 搜索 vimforcpp 进入&#xff0c;找到安装方法中的链接 2.安装 复制粘贴到linux中的命…

【JavaWeb】Day36.MySQL概述——数据库设计-DDL(三)

查询 关于表结构的查询操作&#xff0c;工作中一般都是直接基于图形化界面操作。 1.查询当前数据库所有表 2.查看指定表结构 3.查询指定表的建表语句 注意&#xff1a;23版的点击导航中的转到DDL 修改 关于表结构的修改操作&#xff0c;一般也是直接基于图形化界面操作。 添…

Linux基础篇:Linux第三方软件仓库——可以让Linux变得有趣的软件仓库

Linux第三方软件仓库——可以让Linux变得有趣的软件仓库 一、epel源介绍 EPEL&#xff08;Extra Packages for Enterprise Linux&#xff09;源是一个由Fedora项目组维护的第三方软件仓库&#xff0c;为企业级Linux发行版&#xff08;如Red Hat Enterprise Linux&#xff08;…

2024年阿里云新购、升级及续费活动大全

随着云计算技术的不断发展和普及&#xff0c;越来越多的企业和个人开始选择将业务和数据迁移到云端。作为国内领先的云计算服务提供商&#xff0c;阿里云一直致力于为用户提供更加稳定、高效和安全的云服务。2024年&#xff0c;阿里云继续推出了丰富的新购、升级及续费活动&…

读所罗门的密码笔记12_群雄逐鹿(上)

1. 国际电信规则 1.1. 美国坚持互联网自由和极少的内容限制&#xff0c;这一立场肯定会遭到许多国家的反对 1.2. 除去两个各方针锋相对、无法妥协的议题&#xff0c;比如内容限制规定&#xff0c;实际上所有国家都已在打击垃圾邮件和常见网络安全威胁方…

【苍穹外卖】sql自动补全列名

第一步要设置IDEA与MySQL的链接 右侧的Database 加号 Data Source ----MySQL 填一下用户名密码就行&#xff0c;然后测试连接。可能会有时区问题&#xff0c;他让你点什么你就点 完了之后&#xff0c;他的表好像只有bank下面的那一个&#xff0c;要把所有的表都调出来&…

SpringBoot属性配置的多种方式

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot属性配置的多种方式 📚个人知识库: Leo知识库,欢迎大家访问 目录 …

一些Java面试题

1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象&#xff08;Java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; 3、与平台无关性&#xff08;JVM是Java跨平台使用的根本&#xff09; 4、可靠安全 5、支持多线程 2、面向对象和…