需求:不增加新的实体类前提下,像数据查询并返回多组现实体类不包含的字段值给前端。
实例如下:
{
"code": "success",
"msg": "成功",
"data": [
{
"pk": 11,
"pcode": "15698",
"name": "Q32",
"picnm": 2,
"equcode": "332"
},
{
"pk": 11,
"pcode": "15605",
"name": "Q32",
"picnm": 3,
"equcode": "322"
},
{
"pk": 101,
"pcode": "01019315724",
"name": "WHWQ32",
"picnm": 1,
"equcode": "352"
}
]
}
而HashMap恰好可以很好的应对这种使用场景,多组可以用List<HashMap>接收,而返回给前端的恰好是上图格式。
贴一点实现代码:
Mapper.xml
<select id="queryEquTuhaoByPk" parameterType="java.lang.Integer" resultType="java.util.HashMap">
select
b.pcode,
b.name,
c.picnm,
a.pk
from `equ` a
left join
`pro_equ` c on c.pk = a.pk2
left join
`product` b on b.pkproduct = c.pkproduct
where c.pk = #{pk,jdbcType=INTEGER}
</select>
Mapper.java
List<HashMap<String,Object>> queryEquTuhaoByPk(Integer pk);
IService.java
List<HashMap<String,Object>> getEquTuhaoByPk(Integer pk)throws Exception;
ServiceImpl.java
@Override
public List<HashMap<String, Object>> getEquTuhaoByPk(Integer pk) {
List<HashMap<String, Object>> EquTh = new ArrayList<>();
try {
EquTh = mMapper.queryEquTuhaoByPk(pk);
return EquTh ;
} catch (Exception e) {
e.printStackTrace();
}
return EquTh ;
}
Controller.java
@PostMapping(value = "queryEquPicByPk")
@ResponseBody
public ReturnT queryEquPicByPk(Integer pk) throws Exception {
try {
List<HashMap<String,Object>> result = iService.getEquTuhaoByPk(pk);
return ReturnT.creat(result,ComResponse.SUCCESS, "查询成功!");
} catch (Exception e){
return ReturnT.creat(e.getCause() + "失败", e.getMessage());
}
}
返回泛型
public class ReturnT<T> { public static final String SUCCESS = "success"; public static final String FAILURE = "fail"; public static final String ERROR = "error"; //表明对应请求返回的处理结果“success”“fail” private String code; private String msg; //若status=sucessc,则data内返回前端需要的json //若status=fail,则data返回错误码格式 private T data; /** * 定义一个通用的创建方法,当方法执行成功,则返回sucess * @param object * @return */ public static ReturnT sucess(Object object){ return ReturnT.creat(object,SUCCESS,"操作成功"); } /** * 定义一个通用的创建方法,当方法执行成功,则返回sucess * @return */ public static ReturnT sucess(){ return ReturnT.creat(null,SUCCESS,"操作成功"); } /** * 定义一个通用的创建方法,当方法执行成功,则返回sucess * @param object * @return */ public static ReturnT error(Object object) { return ReturnT.creat(object, ERROR, "操作失败" + object); } /** * 定义一个通用的创建方法,当方法执行成功,则返回sucess * @return */ public static ReturnT error(){ return ReturnT.creat(null,ERROR,"操作失败"); } public static ReturnT creat( String code,String msg) { ReturnT type = new ReturnT(); type.setCode(code); type.setMsg(msg); return type; } public static ReturnT creat(Object data,String code, String msg ) { ReturnT comResponse = new ReturnT(); ReturnT.setCode(code); ReturnT.setMsg(msg); ReturnT.setData(data); return comResponse; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public T getData() { return data; } public void setData(T data) { this.data = data; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
前端:
<el-popover placement="right" trigger="hover" @show="searchproduct(itemdtl)" v-if="itemdtl.pk">
<div>
<el-table :data="product">
<el-table-column width="100" label="编码" prop="pk"></el-table-column>
<el-table-column width="100" label="名称" prop="name"></el-table-column>
<el-table-column width="100" label="图号" prop="picnm"></el-table-column>
<el-table-column width="100" label="型号" prop="code"></el-table-column>
</el-table>
</div>
<el-button slot="reference" type="danger" size="mini">对应数据</el-button>
</el-popover>
searchproduct(itemdtl) {
this.$axios({
method: 'post',
url: 'queryEquPicByPk',
params: {
pkequ: itemdtl.pk
}
}).then(res => {
this.product = res.data.data
})
},