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

分页关联查询

需求分析

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

项目结构

在这里插入图片描述

视图类

package com.wedu.modules.tain.entity.vo;import lombok.Data;import java.util.Date;@Data
public class WarnVo {//传输给前端展示//idprivate 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.statusfrom tain_warn w left join device don 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
    @Autowiredprivate TainWarnMapper tainWarnMapper;@Overridepublic PageUtils queryWarnPage(Map<String, Object> params) {// 从参数中获取当前页码和每页大小//.toString() 从 params 集合中检索到的值转换为字符串格式//Integer.parseInt()将字符串解析为整数int current = Integer.parseInt(params.get("page").toString());int pageSize = Integer.parseInt(params.get("limit").toString());// 设置分页参数Page<WarnVo> page = new Page<>(current,pageSize);//一定要手动关闭 SQL 优化,不然查询总数的时候只会查询主表page.setOptimizeCountSql(false);QueryWrapper<WarnVo> qw = new QueryWrapper<>();//组装查询条件 where status = 1qw.eq("status","1");IPage<WarnVo> wp = tainWarnMapper.selectWarnPage(page,qw);return new PageUtils(wp);}

TainWarnController实现分页查询

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

    @Autowiredprivate 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.statusfrom tain_warn w left join device don d.id=w.device_idwhere w.id = #{id}</select>

ITainWarnService

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

TainWarnServiceImpl

    @Overridepublic 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>

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

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

相关文章

SpringBoot常见问题

1 引言 Spring Boot是一个基于Spring框架的快速开发脚手架&#xff0c;它简化了Spring应用的初始化和搭建过程&#xff0c;提供了众多便利的功能和特性&#xff0c;比如自动配置、嵌入式Tomcat等&#xff0c;让开发人员可以更加专注于业务逻辑的实现。   Spring Boot还提供了…

Linux:Jenkins:GitLab+Maven+Jenkins的部署(1)

1.环境 我这里准备了三台centos7 1.用于部署gitlab 运行内存&#xff1a;6G 名字&#xff1a;Jenkins-GitLab 192.168.6.1 2.用于部署jenkins 运行内存&#xff1a;2G 名字&#xff1a;Jenkins-server 192.168.6.2 3.用于打包测试…

你真的懂串口通信吗?

一、什么是串口通讯&#xff1f; 串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行通信慢&#xff0c;但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。 典型的串口通信使用3根线完成&#xff0c;分…

网络安全--网鼎杯2018漏洞复现(二次注入)

一、环境&#xff1a;在线测试平台 BUUCTF在线评测 (buuoj.cn) 二、进入界面先尝试万能账号 1or11# 换格式 hais1bux1 11or11# 三、万能的不行那我们就得想注册了&#xff0c;去register.php去看看 注册个账号 发现用户名回显&#xff0c;猜测考点为用户名处二次注入&…

《戴森球计划》好玩吗?《戴森球计划》怎么在苹果电脑上安装 戴森球计划攻略 Mac游戏推荐

《戴森球计划》是一款具有强大现实科学基础的模拟策略游戏&#xff0c;玩家的目标是构建能源效率极高的戴森球以解决能源问题。游戏的背景设定启发于科幻作品中的戴森球概念。游戏采用逼真的物理模拟&#xff0c;玩家需要合理规划资源&#xff0c;以应对复杂的能源危机。那么《…

Open3D三维重建

原始点云&#xff1a; alpha_shape算法 import open3d as o3dpcd o3d.io.read_point_cloud("airplane_0001.pcd") mesh o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha0.1) o3d.visualization.draw_geometries([mesh], mesh_show_b…

【贪心算法】代码随想录算法训练营第三十七天 |738.单调递增的数字,968.监控二叉树,总结(待补充)

738.单调递增的数字 1、题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要…

微信小程序之会议OA个人中心后台交互

目录 获取用户昵称头像和昵称 小程序登录 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxProperties WxConfig WxAuthController 登录-小…

Sora:新一代实时音视频通信框架

一、Sora简介 Sora是一个开源的实时音视频通信框架&#xff0c;旨在提供高效、稳定、可扩展的音视频通信解决方案。它基于WebRTC技术&#xff0c;支持跨平台、跨浏览器的实时音视频通信&#xff0c;并且具备低延迟、高并发、易集成等特点。 --点击进入Sora(一定要科学哦&#x…

JVM原理

一、java虚拟机的生命周期&#xff1a; Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务&#xff1a;执行Java程序。程序开始执行时他才运行&#xff0c;程序结束时他就停止。你在同一台机器上运行三个程序&#xff0c;就会有三个运行中的Java虚拟机。 Java虚拟…

【最新Dubbo3深入理解】Dubbo高性能之序列化协议

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

LeetCode--代码详解 54.螺旋矩阵

54.螺旋矩阵 题目 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a; 输入&#xff…