当前位置: 首页 > news >正文

Mybatis-plus-Join--分页查询

数据表四张:

user: id,username,create_time,update_time

product: id,name,price,number(库存),create_time,update_times

order: id,quantity,order_time(下单时间),update_time

order_detail:id,product_id,order_id,quantity,price,create_time,update_time

1、UserService接口:

List<UserDTO> selectAll(int pageNum, int pageSize);

 2、封装的UserDTO类(想在前端展示什么内容,就封装什么属性)

 

package com.xxxx.DTO;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.xxxx.entity.OrderDetail;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.time.LocalDateTime;
import java.util.List;
@Data
public class OrderDTO {@ApiModelProperty(value = "订单ID")@TableId(value = "id", type = IdType.AUTO)private Integer id;@ApiModelProperty(value = "订单数量")private Integer quantity;@ApiModelProperty(value = "下单时间")@TableField(fill = FieldFill.INSERT ,value = "order_time")private LocalDateTime orderTime;@ApiModelProperty(value = "修改时间")@TableField(fill = FieldFill.INSERT_UPDATE ,value = "update_time")private LocalDateTime updateTime;@ApiModelProperty(value = "用户id")@TableField(value = "user_id")private Integer userId;/*** 订单和订单详情是一对多*/private List<OrderDetail> orderDetailList;

3、重点:UserServiceImpl 中的实现逻辑

注入:

@Autowired
private UserMapper userMapper;
 @Overridepublic List<UserDTO> selectAll(int pageNum, int pageSize) {//用户: 订单   1: n//订单 : 订单详情 1: n//订单详情 : 商品 1: 1MPJLambdaWrapper<User> wrapper=new MPJLambdaWrapper<>(User.class).selectAll(User.class)//用户: 订单   1: n.selectCollection(OrderDetail.class,UserDTO::getOrderDetailList).leftJoin(Order.class,Order::getUserId,User::getId).leftJoin(OrderDetail.class,OrderDetail::getOrderId,Order::getId);return userMapper.selectJoinList(UserDTO.class,wrapper);}

 4、UserControler

    @Resourceprivate UserService userService;/*** 分页查询所有用户及详情*/@PostMapping("selectAllPage")public List<UserDTO> selectByPage(int pageNum, int pageSize){return userService.selectAll(pageNum,pageSize);}

5、再PostMan中测试

访问路径:http://localhost:9999/springboot_mp/selectAllPage?pageNum=1&pageSize=3

[
    {
        "id": 1,
        "username": "张三",
        "orderDetailList": [
            {
                "id": 1,
                "productId": 1,
                "orderId": 1,
                "quantity": 3,
                "price": 3000.00,
                "createTime": "2024-12-17T15:24:20",
                "updateTime": "2024-12-17T15:24:20"
            },
            {
                "id": 2,
                "productId": 3,
                "orderId": 1,
                "quantity": 1,
                "price": 2300.00,
                "createTime": "2024-12-17T15:24:20",
                "updateTime": "2024-12-17T15:24:20"
            },
            {
                "id": 5,
                "productId": 1,
                "orderId": 3,
                "quantity": 9,
                "price": 3000.00,
                "createTime": "2024-12-17T15:25:55",
                "updateTime": "2024-12-17T15:25:55"
            },
            {
                "id": 6,
                "productId": 3,
                "orderId": 3,
                "quantity": 10,
                "price": 2300.00,
                "createTime": "2024-12-17T15:25:55",
                "updateTime": "2024-12-17T15:25:55"
            }
        ]
    }
]

 

相关文章:

Mybatis-plus-Join--分页查询

数据表四张&#xff1a; user&#xff1a; id,username,create_time,update_time product&#xff1a; id,name,price,number(库存),create_time,update_times order&#xff1a; id,quantity,order_time(下单时间),update_time order_detail:id,product_id,order_id,quant…...

对BG兼并点的理解-不断刷新版

常想常新&#xff0c;每次接触都有新理解&#xff0c;不确定想的是否正确&#xff0c;拿出来讨论&#xff0c;以最新结论为准 2024-9-19 1、仿真简并点时需要断开启动电路&#xff1a;启动电路会干扰DC结果的计算&#xff0c;可能看到加启动电路后简并点减少&#xff0c;但在…...

python的游标是什么

CURSOR&#xff08;私有SQL 区&#xff09;就是一个句柄&#xff0c;即指针或引用&#xff0c;指向sql私有区&#xff08;一个用户的能打开的cursor数由参数open_cursors决定&#xff09;【确切说&#xff0c;指向sql私有区里的固定部分&#xff08;The persistentarea&#xf…...

硬件---14---PCB学习:PCB封装库及布局操作

一PCB封装元素的组成与介绍 二实例-贴片0603封装的创建 1封装命名 找不到封装库创建页面&#xff0c;可以配合右下角的Panels去找。 找到0603电阻或者电容的PCB封装&#xff0c;根据提供尺寸去设计PCB的封装。 <1>双击PCB器件封装 <2>命名 2放置焊盘&#xff…...

什么是MyBatis

MyBatis 简介 MyBatis 是一个流行的 Java 持久层框架&#xff08;Persistence Framework&#xff09;&#xff0c;它主要用于简化数据库操作&#xff0c;提供了对数据库的映射支持&#xff0c;使得开发人员能够通过简单的配置和映射文件来执行数据库操作&#xff08;如增、删、…...

开发技术-Java改变图片格式

图片上传页未做控制&#xff0c;导致上传的是GIF格式&#xff0c;导致图片识别失败。需要将GIF格式转为JPEG格式。 代码&#xff0c;是找AI写的&#xff0c;记录一下&#xff1a; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; im…...

基于DockerCompose搭建Redis主从哨兵模式

linux目录结构 内网配置 哨兵配置文件如下&#xff0c;创建3个哨兵配置文件 # sentinel26379.conf sentinel26380.conf sentinel26381.conf 内容如下 protected-mode no sentinel monitor mymaster redis-master 6379 2 sentinel down-after-milliseconds mymaster 60000 s…...

aioice里面candidate固定UDP端口测试

环境&#xff1a; aioice0.9.0 问题描述&#xff1a; aioice里面candidate固定UDP端口测试 解决方案&#xff1a; /miniconda3/envs/nerfstream/lib/python3.10/site-packages/aioice import hashlib import ipaddress import random from typing import Optional import…...

Git使用教程-分支使用/合并分支提交

Git使用教程-分支使用 文章目录 Git使用教程-分支使用一、分支&#xff08;branch&#xff09;的基本操作&#xff1a;二、查看分支&#xff1a;参考 一、分支&#xff08;branch&#xff09;的基本操作&#xff1a; git clone https://.git git status …...

单元测试使用记录

什么是单元测试 简单来说就是对一个类中的方法进行测试&#xff0c;对输出的结果检查判断是否符合预期结果 但是在多年的工作中&#xff0c;从来没有哪个项目中真正系统的用到了单元测试&#xff0c;因此对它还是很陌生的&#xff0c;也就造成更加不会在项目中区使用它。 如何…...

LabVIEW实时信号采集与频谱分析

系统通过LabVIEW与PXIe硬件结合&#xff0c;实现高精度模拟信号的实时采集、频谱分析与可视化显示。核心功能包括采样率配置、快速傅里叶变换&#xff08;FFT&#xff09;、功率谱图生成及动态缩放调整&#xff0c;同时支持信号平均与噪声抑制。系统设计灵活&#xff0c;适用于…...

OpenCV(python)从入门到精通——运算操作

加法减法操作 import cv2 as cv import numpy as npx np.uint8([250]) y np.uint8([10])x_1 np.uint8([10]) y_1 np.uint8([20])# 加法,相加最大只能为255 print(cv.add(x,y))# 减法&#xff0c;相互减最小值只能为0 print(cv.subtract(x_1,y_1))图像加法 import cv2 as…...

基础2:值类型与右值引用

1.函数返回 在讲解右值之前&#xff0c;要知道下面这个函数要进行几次拷贝以及为什么&#xff1f; int get_x() {int x 20;return x; }int aget_x(); 答案&#xff1a;两次 # 第一次 int tmpa; # 第二次 int xtmp;2.左值与右值 &#x1f34f;2.1 能取地址操作的就是左值 …...

GitHub年度报告发布!Python首次超越JavaScript

全球开发者数量激增&#xff0c;GenAI 项目呈爆炸式增长趋势&#xff0c;推动编程语言的应用格局也发生了巨大变化&#xff0c;最新的 GitHub Octoverse 报告来了&#xff01; 1、Python 首次超越 JavaScript&#xff0c;成为 GitHub 平台最顶级编程语言 不同于流传“AI 即将取…...

EdgeX Message Bus 消息总线

EdgeX Message Bus 消息总线 一、概述 EdgeX MessageBus 内部消息总线,用于 EdgeX 服务之间的内部通信。 EdgeX 服务是指来自 EdgeX 的任何核心/支持/应用程序/设备服务或使用 EdgeX SDK 构建的任何自定义应用程序或设备服务。 EdgeX MessageBus 用于内部 EdgeX 服务与服务之间…...

【JavaEE进阶】关于Maven

目录 &#x1f334;什么是Maven &#x1f332;为什么要学Maven &#x1f38d;创建一个Maven项目 &#x1f384;Maven核心功能 &#x1f6a9;项目构建 &#x1f6a9;依赖管理 &#x1f38b;Maven Help插件 &#x1f340;Maven 仓库 &#x1f6a9;本地仓库 &#x1f6a…...

YOLOv9-0.1部分代码阅读笔记-autoanchor.py

autoanchor.py utils\autoanchor.py 目录 autoanchor.py 1.所需的库和模块 2.def check_anchor_order(m): 3.def check_anchors(dataset, model, thr4.0, imgsz640): 4.def kmean_anchors(dataset./data/coco128.yaml, n9, img_size640, thr4.0, gen1000, verboseTrue…...

Electronjs+Vue如何开发PC桌面客户端(Windows,Mac,Linux)

electronjs官网 https://www.electronjs.org/zh/ Electron开发PC桌面客户端的技术选型非常适合已经有web前端开发人员的团队。能够很丝滑的过渡。 Electron是什么&#xff1f; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.…...

谷歌浏览器 安装谷歌浏览器特定版本后禁止自动更新

问题描述 我们通过离线安装谷歌浏览器后&#xff0c;第一次打开浏览器时会默认下载最新版本&#xff0c;等到我们重启浏览器后它会自动更新。在项目中为了能固定浏览器版本&#xff0c;所以要禁止谷歌浏览器的更新&#xff0c;网上找了好多方法都没用&#xff0c;自己摸索出来…...

Linux计算时间差

Linux计算时间差 1、Linux计算时间差2、时间差的应用 1、Linux计算时间差 在Linux中&#xff0c;计算时间差通常是为了统计、监控或调试。时间差可以用来衡量任务执行的时间&#xff0c;或者两个事件之间的间隔。例如&#xff0c;响应时间、执行时间、定时任务与延时处理等 以…...

Python的3D可视化库【vedo】2-5 (plotter模块) 坐标转换、场景导出、添加控件

文章目录 4 Plotter类的方法4.7 屏幕和场景中的坐标点转换4.7.1 屏幕坐标转为世界坐标4.7.2 世界坐标转为屏幕坐标4.7.3 屏幕坐标取颜色 4.8 导出4.8.1 导出2D图片4.8.2 导出3D文件 4.9 添加控件4.9.1 添加内嵌子窗口4.9.2 添加选择区4.9.3 添加比例尺4.9.4 为对象添加弹出提示…...

【VUE】13、安装nrm管理多个npm源

nrm&#xff08;npm registry manager&#xff09;是一个 npm 源管理器&#xff0c;它允许用户快速地在不同的 npm 源之间进行切换&#xff0c;以提高包管理的速度和效率。以下是对 nrm 使用的详细介绍&#xff1a; 1、安装nrm 在使用 nrm 之前&#xff0c;需要先确保已经安装…...

【SQL/MySQL 如何使用三种触发器】SQL语句实例演示

触发器介绍 – 触发器是与表有关的数据库对象&#xff0c;指在insert/update/delete之前(BEFORE)或之后(AFTER)&#xff0c;触发并执行触发器中定义的SQL语句集合。 – 使用别名OLD和NEW来引用触发器中发生变化的记录内容&#xff0c;这与其他的数据库是相似的。现在触发器还只…...

Docker容器五种网络驱动模式详解

Docker 网络用于在容器之间以及容器与外部网络之间提供通信功能。它允许容器在隔离的网络环境中运行&#xff0c;同时也能根据需要与其他容器或外部网络进行交互。通过使用网络驱动&#xff0c;Docker 可以创建不同类型的网络&#xff0c;以满足各种应用场景的需求。 传统上&am…...

netfilter简介及流程图

Netfilter 是 Linux 内核中用于网络包过滤和操作的框架&#xff0c;由 Rusty Russell 于1998年创立&#xff0c;旨在改进旧的 ipchains 和 ipfwadm 实现。它采用模块化设计&#xff0c;具有良好可扩展性&#xff0c;并在2000年3月合并进Linux 2.3.x内核版本。 Netfilter的主要…...

Vue 前端代码规范

在 Vue 前端开发中&#xff0c;遵循代码规范可以提高代码的可读性、可维护性和团队协作效率。以下是一些详细的 Vue 前端代码规范&#xff0c;涵盖了多个方面&#xff1a; ### 1. **项目结构** - **目录结构**:- src/ 目录下应包含 components/、views/、store/、router/、ass…...

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…...

js常用方法之: 预览大图(uniapp原生方法封装)

方法: //预览图片 pic可传单个图片地址字符串 或 图片数组(带index) previewPic: function(pic, index) {if (!pic) return;if (index undefined) {let array [];array.push(pic);uni.previewImage({urls: array,current: array[0]});} else {uni.previewImage({urls: pic,…...

python 高级用法

1、推导列表 ans [ x for x in range(6)] print(ans)ans [ x for x in range(6) if x > 2] print(ans)ans [ x*y for x in range(6) if x > 2 for y in range(6) if y < 3] print(ans) 2、map 函数 a list(map(list,"abc")) print(a) b list(map(ch…...

TISAX认证最新消息

一、TISAX认证概述 TISAX&#xff08;Trusted Information Security Assessment Exchange&#xff09;认证是由德国汽车工业协会&#xff08;VDA&#xff09;主导开发的一种信息安全评估标准。该认证旨在确保汽车供应链中的信息安全&#xff0c;帮助汽车产业链中的企业保护其敏…...