MybatisPlus多表联查-分页关联查询+根据id获取多表联查后的单行数据

分页关联查询

需求分析

两张表w以及d,需要w的一些字段以及d的一些字段在前端显示
此时就需要用到关联查询,查询到的数据放入视图类,显示在前端

项目结构

在这里插入图片描述

视图类

package com.wedu.modules.tain.entity.vo;

import lombok.Data;

import java.util.Date;

@Data
public class WarnVo {
    //传输给前端展示
    //id
    private Long id;
    //车间
    private String workshops;
    //设备编号
    private String deviceNumber;
    //设备名称
    private String deviceName;
    //设备型号
    private String deviceModel;
    //维保到期时间
    private Date tainEndTime;
    //预警时间
    private Date warnTime;
    //状态(是否生成预警信息 是否被保养)
    private int status;
}

定义关联查询分页方法

首先在mapper接口中再定义分页的关联查询方法,复用分页类page,querywrapper组装where条件

@Mapper
public interface TainWarnMapper extends BaseMapper<TainWarn> {
    IPage<WarnVo> selectWarnPage(IPage<WarnVo> page, @Param(Constants.WRAPPER) QueryWrapper<WarnVo> wrapper);
}

在对应xml内创建对应的关联查询

  • TainWarnMapper.xml
<select id="selectWarnPage" resultType="com.wedu.modules.tain.entity.vo.WarnVo">
        select w.id,d.workshops,d.device_number,d.device_name,d.device_model,w.warn_time,w.tain_end_time,d.status
        from tain_warn w left join device d
                                   on d.id=w.device_id
            ${ew.customSqlSegment}
    </select>

${ew.customSqlSegment}是MyBatis Plus提供的动态SQL语句拼接功能。
在使用MyBatis Plus进行数据库操作时,可以通过Wrapper对象来构建查询条件。Wrapper对象可以通过链式调用的方式动态添加查询条件,包括等于、大于、小于等各种条件。而${ew.customSqlSegment}就是Wrapper对象中自定义的SQL片段,可以灵活地根据业务需求进行动态拼接。

service层

在service内写一个接口方法在impl内实现,先新建一个查询每页显示10条,再手动关闭sql优化避免查询总数的时候只查询主表,再创建querywrapper对象写查询条件,最后调用mapper接口的分页关联查询方法,传入分页的查询和查询条件,最后返回对象

  • ITainWarnService
public interface ITainWarnService extends IService<TainWarn> {
    PageUtils queryWarnPage(Map<String, Object> params);
}
  • TainWarnServiceImpl
    @Autowired
    private TainWarnMapper tainWarnMapper;

    @Override
    public PageUtils queryWarnPage(Map<String, Object> params) {
        Page<WarnVo> page = new Page<>(1, 10);
        //一定要手动关闭 SQL 优化,不然查询总数的时候只会查询主表
        page.setOptimizeCountSql(false);
        QueryWrapper<WarnVo> qw = new QueryWrapper<>();
        //组装查询条件 where status = 1
        qw.eq("status","1");
        IPage<WarnVo> wp = tainWarnMapper.selectWarnPage(page,qw);
        return new PageUtils(wp);
    }

TainWarnController实现分页查询

和之前写的分页查询一模一样,查询过程变了,但最后和前端的交互是一样的

    @Autowired
    private ITainWarnService iTainWarnService;

    @GetMapping("/queryWarnMessage")
    public R queryWarnMessage(@RequestParam Map<String,Object> params){
        PageUtils page = iTainWarnService.queryWarnPage(params);
        return R.ok().put("page",page);
    }

前端显示如图,分页关联查询成功
在这里插入图片描述

根据id获取当前一行数据

在前端点击添加保养记录的时候获取这条数据的id,根据当前点击数据的id查询warnVo实体类找到该条数据,warnVo是w和d两张表关联查询的结果

TainWarnMapper

首先写一个接口,传入id获取单行数据的实体类,@Param("id")写别名

@Mapper
public interface TainWarnMapper extends BaseMapper<TainWarn> {
    WarnVo selectById(@Param("id") Long id);
}

在xml内写查询语句,这里明确根据id查找可以直接写where,不用高级查询querywrapper再拼接

<select id="selectById" resultType="com.wedu.modules.tain.entity.vo.WarnVo" parameterType="java.lang.Long">
        select w.id,d.workshops,d.device_number,d.device_name,d.device_model,w.warn_time,w.tain_end_time,d.status
        from tain_warn w left join device d
                                   on d.id=w.device_id
        where w.id = #{id}
    </select>

ITainWarnService

public interface ITainWarnService extends IService<TainWarn> {
    WarnVo selectById(Long id);
}

TainWarnServiceImpl

    @Override
    public WarnVo selectById(Long id) {
        return tainWarnMapper.selectById(id);
    }

TainWarnController

    //根据id拿出用户信息
    @GetMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        WarnVo warnVo = iTainWarnService.selectById(id);
        return R.ok().put("warnVo",warnVo);
    }

根据id查询结果可在network的response内看到
在这里插入图片描述
在这里插入图片描述

部分前端代码

<script>
export default {
  data() {
    return {
      dataForm: {
        id: 0,
        workshops: "",
        deviceNumber: "",
        deviceName: "",
        deviceModel: "",
        tainEndTime: "",
        warnTime: "",
        status: "",
      },
      dialogVisible: false,
    };
  },
  methods: {
    init(id) {
        this.dataForm.id=id;
      this.dialogVisible = true;
      this.$nextTick(() => {
        this.$refs["dataForm"].resetFields();
      });
      if (this.dataForm.id) {
        this.$http({
          url: this.$http.adornUrl(`/tain/warn/info/${this.dataForm.id}`),
          method: "get",
        }).then(({ data }) => {
          if (data && data.code === 0) {
            (this.dataForm.workshops = data.warnVo.workshops),
              (this.dataForm.deviceNumber = data.warnVo.deviceNumber),
              (this.dataForm.deviceName = data.warnVo.deviceName),
              (this.dataForm.deviceModel = data.warnVo.deviceModel),
              (this.dataForm.tainEndTime = data.warnVo.tainEndTime),
              (this.dataForm.warnTime = data.warnVo.warnTime),
              (this.dataForm.status = data.warnVo.status);
          }
        });
      }
    },
    handleClose(done) {
      this.$confirm("确认关闭?")
        .then((_) => {
          done();
        })
        .catch((_) => {});
    },
  },
};
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用智能电销机器人,拓客效果更佳!

现在很多的企业做销售都离不开电话营销&#xff0c;它是一种能够直接帮助企业获取更多利润的营销模式&#xff0c;目前被各大行业所采用。 znyx222 了解探讨 电话营销是一个压力很大的职业&#xff0c;新员工培养难度大、老员工又不好维护&#xff0c;会有情绪问题出现等&…

WPF中样式

WPF中样式&#xff1a;类似于winform中控件的属性 <Grid><!-- Button属性 字体大小 字体颜色 内容 控件宽 高 --><Button FontSize"20" Foreground"Blue" Content"Hello" Width"100" Height"40"/></G…

【plt.hist绘制直方图】:从入门到精通,只需一篇文章!【Matplotlib可视化】

【&#x1f4ca;plt.pie绘制直方图】&#xff1a;从入门到精通&#xff0c;只需一篇文章&#xff01;【Matplotlib可视化】&#xff01; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; &#x1f4c8; 一、引言&#x1f50d; 二、plt.hist()函数基础&am…

Maven属性scope

参考&#xff1a; maven 中 scope标签的作用&#xff08;runtime、provided、test、compile 的作用&#xff09; 【Maven】属性scope依赖作用范围详解 scope为provided

Elasticsearch:什么是 kNN?

kNN - K-nearest neighbor 定义 kNN&#xff08;即 k 最近邻算法&#xff09;是一种机器学习算法&#xff0c;它使用邻近度将一个数据点与其训练并记忆的一组数据进行比较以进行预测。 这种基于实例的学习为 kNN 提供了 “惰性学习&#xff08;lazy learning&#xff09;” 名…

168基于matlab的六自由度并联摇摆台的反解控制算法

基于matlab的六自由度并联摇摆台的反解控制算法&#xff0c;stewart平台&#xff0c;配有GUI界面&#xff0c;可以自定义角度&#xff0c;杆长等参数。设定动平台位姿即能得到电机参数。程序已调通&#xff0c;可直接运行。 168 六自由度并联摇摆台 反解控制算法 (xiaohongshu.…

STM32的SDIO

一.SDIO简介 SDIO&#xff0c;全称Secure Digital Input/Output&#xff0c;是一种用于在移动设备和嵌入式系统中实现输入/输出功能的接口标准。它结合了SD卡的存储功能和I/O功能&#xff0c;允许设备通过SD卡槽进行数据输入输出和外围设备连接。 SDIO接口通常被用于连接各种…

人工智能|深度学习——基于对抗网络的室内定位系统

代码下载&#xff1a; 基于CSI的工业互联网深度学习定位.zip资源-CSDN文库 摘要 室内定位技术是工业互联网相关技术的关键一环。该技术旨在解决于室外定位且取得良好效果的GPS由于建筑物阻挡无法应用于室内的问题。实现室内定位技术&#xff0c;能够在真实工业场景下实时追踪和…

112. Path Sum(路径总和)

问题描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点 是指…

记录使用kiwi进行单元测试文件左边不展示运行按钮的问题

进行单元测是的时候&#xff0c;遇到一下一个问题&#xff0c;就是测试文件左上方没有运行按钮&#xff0c;后来经过调试&#xff0c;发现有两个原因可以导致这个问题 1 创建spec文件的时候&#xff0c;没有在test 文件夹和target下 2 podfile 中 test的target中&#xff0c…

【PHP】web服务器支持PHP_环境配置

一、PHP运行目前为止主要有4方式 &#xff08;1&#xff09;以模块加载的方式运行&#xff0c;初学者可能不容易理解&#xff0c;其实就是将PHP集成到Apache服务器&#xff0c; 以同一个进程运行。 &#xff08;2&#xff09;以CGI的方式运行&#xff0c;CGI英文叫…

力扣算法Algorithm竞赛模板库(codeforces-go):含了算法竞赛中常用的数据结构和算法实现,助力开发者更高效地解决问题

1.算法Algorithm竞赛模板库&#xff08;codeforces-go&#xff09; 算法竞赛模板库&#xff0c;为算法竞赛爱好者提供了一系列精心设计的算法模板。这个库包含了算法竞赛中常用的数据结构和算法实现&#xff0c;助力开发者更高效地解决问题 一个算法模板应当涵盖以下几点&…

debug - 只要在内存中有显示相关的数据, 就会被CE找到

文章目录 debug - 只要在内存中有显示相关的实际数据, 就会被CE找到概述笔记demo实现demo运行效果用CE查找实际数据地址找到自己的调试点 - 方法1找到自己的调试点 - 方法2打补丁备注END debug - 只要在内存中有显示相关的实际数据, 就会被CE找到 概述 自己写了一个demo, 想验…

Spring之AOP源码解析(中)

前言 在上一篇文章中,我们讲解了Spring中那些注解可能会产生AOP动态代理,我们通过源码发现,完成AOP相关操作都和ProxyFactory这个类有密切关系,这一篇我们将围绕这个类继续解析 演示 作用 ProxyFactory采用策略模式生成动态代理对象,具体生成cglib动态代理还是jdk动态代理,…

JAVA高并发——Java虚拟机锁优化

文章目录 1、锁偏向2、轻量级锁3、自旋锁4、锁消除 作为一款共用平台&#xff0c;JDK本身也为并发程序的性能绞尽脑汁。在JDK内部也想尽一切办法提高并发时的系统吞吐量。这里将向大家简单介绍几种JDK内部的“锁”优化策略。 1、锁偏向 锁偏向是一种针对加锁操作的优化手段。它…

用python绘制黄金价格变化曲线

首先你得从mt4把数据导出为csv&#xff1a;mt4如何导出数据-CSDN博客 1、引入必要的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt 2、然后通过pandas载入csv数据 raw pd.read_csv("XAUUSDm1.csv", headerNone, index_colNone, p…

IO(2)

1 >使用从文件中读和写入文件完成两个文件的拷贝 #include<myhead.h> int main(int argc, const char *argv[]) {if(argc!3){puts("input error");return -1;}FILE *fprNULL;if((fprfopen(argv[1],"rb"))NULL){perror("fopen error");…

数据分析 - 机器学习

1&#xff1a;线性回归 线性回归是一种统计技术用于对输出变量与一个或多个输入变量之间的关系进行建模 用外行人的话来说&#xff0c;将其视为通过某些数据点拟合一条线&#xff0c;如下所示 以便在未知数据上进行预测&#xff0c;假设变量之间存在线性关系 点和线之间存在微小…

力扣(LeetCode)数据结构练习题(2)

今天又写了两道关于链表的练习题&#xff0c;来给大家分享一下。巩固一下上一篇学到的链表知识&#xff0c;题目可以然我们更清楚的认识链表。 目录 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 给你单链表的头结点 head &#xff0c;请…

【.NET Core】C#编程规范

【.NET Core】C#编程规范 文章目录 【.NET Core】C#编程规范一、概述1.1 结构清晰第一1.2 简洁之风1.3 代码风格保持一致性 二、命名约定三、类型参数命名指南3.1 请使用描述性名称命名泛型类型参数&#xff0c;除非单个字面名称完全具有自我说明性且描述性名称不会增加任何作用…