若依 springboot mybatis-plus mysql 两表联级查询


两表联级查询

一、案例描述

数据库中有仪器设备表data_apparatus和仪器设备检校表data_apparatus_check_scheme。
实现联级查询,在获取检校表全部数据的基础上,获取设备表中的某些属性数据,一起传给前端。

二、实现步骤

1.创建vo类

在原有检校表实体类DataApparatusCheckScheme的基础上,创建新的实体类DataApparatusCheckSchemeVo,该实体类中加入了需要查询的设备表的相应属性。

注意:
当前端需要的数据类型与数据库中存储的数据类型不符时,也可以用创建vo类的方法来解决。比如数据库存储的时间数据是Date日期类型的,而前端需要的是String类型的数据,就可以在vo中把时间数据写成String类型,并生成对应的String类型get、set方法。

DataApparatusCheckSchemeVo:

package com.ruoyi.system.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.system.domain.DataApparatus;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.util.Date;

public class DataApparatusCheckSchemeVo {
    private static final long serialVersionUID = 1L;

    /** 主键 */
    private Long id;

    /** 仪器id */
    @Excel(name = "仪器id")
    private Long apparatusId;

    /** 检/校参量 */
    @Excel(name = "检/校参量")
    private String checkParameter;

    /** 检/校范围 */
    @Excel(name = "检/校范围")
    private String checkRange;

    /** 检/校依据 */
    @Excel(name = "检/校依据")
    private String checkBasis;

    /** 检定单位 */
    @Excel(name = "检定单位")
    private String checkUnit;

    /** 备注 */
    @Excel(name = "备注")
    private String rmk;
/**------------------将数据库中日期型的年份数据,改为前端需要的String类型------------------------------------- */
    /** 年份 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "年份", width = 30, dateFormat = "yyyy")
    private String checkYearVo;

    /** 检校日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date checkYear;

    /** 检/校结果 (字典)*/
    @Excel(name = "检/校结果")
    private String checkResult;
/**------------------添加需要查询的设备表数据------------------------------------- */
    /** 仪器设备名称 */
    @Excel(name = "仪器设备名称")
    private String apparatusName;

    /** 实验室编号(字典) */
    @Excel(name = "实验室编号(字典)")
    private String labId;

    /** 仪器设备型号 */
    @Excel(name = "仪器设备型号")
    private String apparatusModel;

    /** 出厂编号 */
    @Excel(name = "出厂编号")
    private String factoryNum;


    /** 使用部门(字典) */
    @Excel(name = "使用部门(字典)")
    private String userDepartment;

    /** 检/校周期 */
    @Excel(name = "检/校周期")
    private String checkCycle;

    /** 有效期 */
    @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date validDate;

    public void setId(Long id)
    {
        this.id = id;
    }

    public Long getId()
    {
        return id;
    }
    public void setApparatusId(Long apparatusId)
    {
        this.apparatusId = apparatusId;
    }

    public Long getApparatusId()
    {
        return apparatusId;
    }
    public void setCheckParameter(String checkParameter)
    {
        this.checkParameter = checkParameter;
    }

    public String getCheckParameter()
    {
        return checkParameter;
    }
    public void setCheckRange(String checkRange)
    {
        this.checkRange = checkRange;
    }

    public String getCheckRange()
    {
        return checkRange;
    }
    public void setCheckBasis(String checkBasis)
    {
        this.checkBasis = checkBasis;
    }

    public String getCheckBasis()
    {
        return checkBasis;
    }
    public void setCheckUnit(String checkUnit)
    {
        this.checkUnit = checkUnit;
    }

    public String getCheckUnit()
    {
        return checkUnit;
    }
    public void setRmk(String rmk)
    {
        this.rmk = rmk;
    }

    public String getRmk()
    {
        return rmk;
    }
    public void setCheckYearVo(String checkYearVo)
    {
        this.checkYearVo = checkYearVo;
    }

    public String getCheckYearVo()
    {
        return checkYearVo;
    }
    public void setCheckResult(String checkResult)
    {
        this.checkResult = checkResult;
    }

    public String getCheckResult()
    {
        return checkResult;
    }

    public void setApparatusName(String apparatusName)
    {
        this.apparatusName = apparatusName;
    }

    public String getApparatusName()
    {
        return apparatusName;
    }

    public Date getCheckYear() {
        return checkYear;
    }

    public void setCheckYear(Date checkYear) {this.checkYear = checkYear;}


    public Date getValidDate() {
        return validDate;
    }

    public String getLabId() {
        return labId;
    }

    public void setLabId(String labId) {
        this.labId = labId;
    }

    public String getApparatusModel() {
        return apparatusModel;
    }

    public void setApparatusModel(String apparatusModel) {
        this.apparatusModel = apparatusModel;
    }

    public String getFactoryNum() {
        return factoryNum;
    }

    public void setFactoryNum(String factoryNum) {
        this.factoryNum = factoryNum;
    }

    public String getUserDepartment() {
        return userDepartment;
    }

    public void setUserDepartment(String userDepartment) {
        this.userDepartment = userDepartment;
    }

    public String getCheckCycle() {
        return checkCycle;
    }

    public void setCheckCycle(String checkCycle) {
        this.checkCycle = checkCycle;
    }
    public void setValidDate(Date validDate) {this.validDate = validDate;}
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("apparatusId", getApparatusId())
                .append("checkParameter", getCheckParameter())
                .append("checkRange", getCheckRange())
                .append("checkBasis", getCheckBasis())
                .append("checkUnit", getCheckUnit())
                .append("rmk", getRmk())
                .append("checkYearVo", getCheckYearVo())
                .append("checkResult", getCheckResult())
                .append("apparatusName", getApparatusName())
                .append("checkYear", getCheckYear())
                .append("validDate", getValidDate())
                .append("labId",getLabId())
                .append("apparatusModel",getApparatusModel())
                .append("factoryNum",getFactoryNum())
                .append("userDepartment",getUserDepartment())
                .append("checkCycle",getCheckCycle())
                .toString();
    }
}

2.修改Mapper.xml文件中的查询方法

DataApparatusCheckSchemeMapper.xml:

 <resultMap type="DataApparatusCheckSchemeVo" id="DataApparatusCheckSchemeVoResult">
        <result property="id"    column="id"    />
        <result property="apparatusId"    column="apparatus_id"    />
        <result property="checkParameter"    column="check_parameter"    />
        <result property="checkRange"    column="check_range"    />
        <result property="checkBasis"    column="check_basis"    />
        <result property="checkUnit"    column="check_unit"    />
        <result property="rmk"    column="rmk"    />
        <result property="checkYearVo"    column="check_year1"    />
        <result property="checkResult"    column="check_result"    />
        <result property="apparatusName"    column="apparatus_name"    />
        <result property="checkYear"    column="check_year"    />
        <result property="validDate"    column="valid_date"    />
        <result property="labId"    column="lab_id"    />
        <result property="apparatusModel"    column="apparatus_model"    />
        <result property="factoryNum"    column="factory_num"    />
        <result property="userDepartment"    column="user_department"    />
        <result property="checkCycle"    column="check_cycle"    />
    </resultMap>

    <sql id="selectDataApparatusCheckSchemeVo">
        select data_apparatus_check_scheme.id, apparatus_id, check_parameter, check_range, check_basis,
               check_unit, data_apparatus_check_scheme.rmk, check_year,DATE_FORMAT(check_year,'%Y') as check_year1,
               data_apparatus_check_scheme.check_result,apparatus_name,is_need_check,valid_date,lab_id,apparatus_model,
               factory_num,user_department,check_cycle
        from data_apparatus_check_scheme LEFT JOIN data_apparatus ON data_apparatus_check_scheme.apparatus_id = data_apparatus.id

    </sql>
    

3.修改其余文件

DataApparatusCheckSchemeMapper.java

    /**
     * 查询仪器校准方案列表
     * 
     * @param dataApparatusCheckSchemeVo 仪器校准方案
     * @return 仪器校准方案集合
     */
    /*public List<DataApparatusCheckScheme> selectDataApparatusCheckSchemeList(DataApparatusCheckScheme dataApparatusCheckScheme);*/
    public List<DataApparatusCheckSchemeVo> selectDataApparatusCheckSchemeList(DataApparatusCheckSchemeVo dataApparatusCheckSchemeVo);

IDataApparatusCheckSchemeService.java

 /**
     * 查询仪器校准方案列表
     * 
     * @param dataApparatusCheckSchemeVo 仪器校准方案
     * @return 仪器校准方案集合
     */
    public List<DataApparatusCheckSchemeVo> selectDataApparatusCheckSchemeList(DataApparatusCheckSchemeVo dataApparatusCheckSchemeVo);

DataApparatusCheckSchemeServiceImpl.java

 /**
     * 查询仪器校准方案列表
     * 
     * @param dataApparatusCheckSchemeVo 仪器校准方案
     * @return 仪器校准方案
     */
    @Override
    public List<DataApparatusCheckSchemeVo> selectDataApparatusCheckSchemeList(DataApparatusCheckSchemeVo dataApparatusCheckSchemeVo)
    {
        return dataApparatusCheckSchemeMapper.selectDataApparatusCheckSchemeList(dataApparatusCheckSchemeVo);
    }

DataApparatusCheckSchemeController.java:

package com.ruoyi.web.controller.system;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.file.WordUtil;
import com.ruoyi.system.domain.DataApparatus;
import com.ruoyi.system.domain.TempEntity.TempDataApparatus;
import com.ruoyi.system.domain.TempEntity.TempDataApparatusCheckScheme;
import com.ruoyi.system.domain.vo.DataApparatusCheckSchemeVo;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.impl.DataApparatusCheckSchemeServiceImpl;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.DataApparatusCheckScheme;
import com.ruoyi.system.service.IDataApparatusCheckSchemeService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;

import static org.apache.naming.SelectorContext.prefix;

/**
 * 仪器校准方案Controller
 * 
 * @author 1116
 * @date 2022-06-21
 */
@RestController
@RequestMapping("/system/scheme")
public class DataApparatusCheckSchemeController extends BaseController
{
    @Autowired
    private IDataApparatusCheckSchemeService dataApparatusCheckSchemeService;
    @Autowired
    private ISysDictDataService dictDataService;

    /**
     * 查询仪器校准方案列表
     */
    @PreAuthorize("@ss.hasPermi('system:scheme:list')")
    @GetMapping("/list")
    public TableDataInfo list(DataApparatusCheckSchemeVo dataApparatusCheckSchemeVo)
    {
        startPage();
        List<DataApparatusCheckSchemeVo> list = dataApparatusCheckSchemeService.selectDataApparatusCheckSchemeList(dataApparatusCheckSchemeVo);
        return getDataTable(list);
    }
}    

scheme.js:

import request from '@/utils/request'

// 查询仪器校准方案列表
export function listScheme(query) {
  return request({
    url: '/system/scheme/list',
    method: 'get',
    params: query
  })
}


总结

Vo类存储需要查询的数据,然后在mapper.xml增加相应的resultmap,修改sql语句。然后修改对应的mapper.java,service,serviceImpl,Controller文件,最后修改前端js文件。

### Spring BootMyBatis-Plus查实现方法 #### 一、环境准备 为了能够顺利地完成Spring BootMyBatis-Plus的集成并进行查的操作,需先准备好开发环境。这包括但不限于安装MySQL数据库以及用于管理该数据库的工具Navicat[^2]。 #### 二、项目搭建 创建一个新的Spring Boot工程,在`pom.xml`文件中加入必要的依赖项来引入MyBatis-Plus的支持: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版号</version> </dependency> <!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> ``` 配置数据源信息于application.properties或yml文件内,指定JDBC URL、用户名及密码等参数以便连接到目标数据库。 #### 三、实体类定义 针对不同类型的关关系(一对一、一对),分别设计相应的JavaBean对象示各个格的数据结构,并通过@TableName注解指明所映射的具体名;对于存在外键约束的情况,则可以利用@TableField(fill= FieldFill.INSERT_UPDATE)等方式处理字段填充逻辑。 ##### 用户(User)和订单(Order)之间的一对关系为例: ```java // User.java import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class User { @TableId(type = IdType.AUTO) private Long id; private String name; } // Order.java import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("t_order") public class Order { @TableId(type = IdType.AUTO) private Long orderId; private Long userId; // 关用户的ID private Double amount; } ``` #### 四、Mapper接口编写 基于上述实体类构建各自的Mapper接口继承自BaseMapper<T>泛型基类,从而获得CRUD功能的同时也能方便后续扩展其他业务需求。当涉及到复杂的查询场景时,可以通过XML方式或者注解形式定义SQL语句来进行合检索操作。 ##### 对应上面提到的例子来说,如果想要获取某个用户及其所有的订单记录,可以在UserMapper中添加如下方法签名: ```java List<UserOrderVo> selectUserOrders(@Param("userId")Long userId); ``` 其中UserOrderVo是一个视图对象(View Object),用来封装最终返回给前端的结果集。 #### 五、Service层编码 在服务端内部调用之前声明好的DAO层API执行具体的读写动作,并负责协调个持久化组件之间的交互过程。考虑到事务管理和异常捕获等因素的影响,建议采用AOP切面编程技术简化这部分代码的设计难度。 #### 六、Controller控制器暴露RESTful API 最后一步就是对外提供HTTP请求入口点了,即按照标准规范书写@RequestMapping标注下的处理器函数,接收来自客户端提交过来的各种参数后转发至后台做进一步加工计算再响应结果回去。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值