首页 > 技术文章 > 【关联字段如何在列表中显示】查询车间列表页面中,显示关联的公司(company)字段

amigou 2021-11-13 10:30 原文

在这里插入图片描述
车间列表显示的隶属公司字段是company_id,该字段是公司表中的主键。

如何修改,让它显示公司表中的 company_name,而不是显示company_id。

这个功能,需要作两表的关联查询,查询出的company_name放在json数组中,返回到前端显示。

前端页面改造

<el-table-column label="隶属公司" align="center" prop="companyId" />
修改为-->
<el-table-column label="隶属公司" align="center" prop="companyName" />

实体类改造(添加字段)

/** 隶属公司 */
    @Excel(name = "隶属公司的名称")
    private Long companyName;
    
    public Long getCompanyName() {
        return companyName;
    }

    public void setCompanyName(Long companyName) {
        this.companyName = companyName;
    }
	@Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("workshopId", getWorkshopId())
            .append("workshopName", getWorkshopName())
            .append("workshopDesc", getWorkshopDesc())
            .append("companyId", getCompanyId())
            .append("companyName", getCompanyName())
            .append("backgroundImg", getBackgroundImg())
            .append("status", getStatus())
            .append("delFlag", getDelFlag())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .toString();
    }

SQL语句改造(添加Join查询)

resultMap 中增加 property=“companyName”

<resultMap type="DigWorkshop" id="DigWorkshopResult">
		---略---
        <result property="companyId"    column="company_id"    />
        <result property="companyName"    column="company_name"    />
		---略---
    </resultMap>

Select公共字段改造(添加company_name列)

SELECT
	a.workshop_id,
	a.workshop_name,
	a.workshop_desc,
	a.company_id,
	b.company_name,
	a.background_img,
	a. STATUS,
	a.del_flag,
	a.create_by,
	a.create_time,
	a.update_by,
	a.update_time
FROM
	dig_workshop a
LEFT JOIN dig_company b ON a.company_id = b.company_id

BUG

测试部署

在这里插入图片描述
看一下后台报错信息:

(无法确定返回值类型)

org.springframework.dao.DataIntegrityViolationException: 
Error attempting to get column 'company_name' from result set.  
Cause: 
java.sql.SQLDataException: 
Cannot determine value type from string '江苏联康信息股份有限公司'

在这里插入图片描述
虽然它的报错信息,是在service的实现类里,但是我跟进去看了一下,发现写的代码没什么问题。

值无法匹配

我想了想:Error attempting to get column ‘company_name’ from result set. 尝试从result set中获取company_name失败。

是不是这个字段和我实体类里的属性无法匹配?

我去实体类里一看,果然发现了问题的阿症结所在

我居然把companyName的类型写错了,我写成了Long类型,但是它返回的数据是String类型,当然无法匹配了。
在这里插入图片描述

将companyName类型修改为 String类型。

在这里插入图片描述

修复BUG,再次测试部署

再次测试部署,成功显示

在这里插入图片描述

推荐阅读