MyBatis动态SQL如何实现前端指定返回字段

网友投稿 1225 2022-11-04

MyBatis动态SQL如何实现前端指定返回字段

MyBatis动态SQL如何实现前端指定返回字段

目录动态SQL实现前端指定返回字段问题描述解决方案MyBatis如何返回部分字段.xml文件中resultMap的type改为第二种很笨的方法

动态SQL实现前端指定返回字段

问题描述

在使用ClickHouse时,遇到需要根据业务需求,动态返回指定字段,从而充分利用ClickHouse列式存储的优势。

解决方案

可用MyBatis的动态SQL进行数据返回;故可在业务层将指定返回的列传入数据层,利用foreach标签进行遍历返回数据。

代码实现

1.请求参数

@Data

public class QueryDTO {

/**

* 返回值

*/

private Set targetFields;

}

2.mapper接口

/**

* 查询数据

* @param record

* @return

*/

List query(QueryDTO record);

3.mapper.xml实现

resourceId, platformCount, createUserId

select

<foreach collection="targetFields" item="item" separator=",">

${item}

,

from resource_total

where 1 = 1

4.注意事项

a.使用动态返回字段时,不可使用预先编译,故foreach中使用‘$’符号,而不使用‘#’;

b.foreach标签后若还有其他固定字段返回,记得用逗号‘,’分隔。

MyBatis如何返回部分字段

mybatis 返回部分字段,这里介绍两种方式(主推第一种)

.xml文件中resultMap的type改为

java.util.HashMap 即可

其余代码都不用写, 亲测可用,xml文件中代码如下:

select

province_name,

area_name,lane_num,

road_name

from site_info

where 1=1

and del_flag='0'

第二种很笨的方法

重新新建一个对象实体,该实体文件的字段与要返回的 “部分字段” 一一对应即可,代码如下:

resultMap 的type=com.sinosoft.pojo.DeviceNumber   指向一个文件,该文件为新建实体类,里面是要返回的 “部分字段”

SELECT

t1.distCode,

t1.distName,

t2.number

FROM

(

select

fd_objectid distCode,

area_name distName

FROM t_sys_area

WHERE LEVEL='2'

) t1 LEFT JOIN (

SELECT

city_no,

count(*) as number

FROM site_info

WHERE 1=1

and del_flag='0'

and is_bridge!='1'

GROUP BY city_no

)t2 on t2.city_no=t1.distCode

DeviceNumber 文件内容如下:

package com.sinosoft.pojo;

/**

* 数据返回

* @author zhangyajuan

*

*/

public class DeviceNumber {

private String distCode;//行政区划

private String distName;//行政区划名称

private String number;//设备数量

public String getDistCode() {

return distCode;

}

public void setDistCode(SfFlUJztring distCode) {

this.distCode = distCode;

}

public String getDistName() {

return distName;

}

public void setDistName(String distName) {

this.distName = distName;

}

public String getNumber() {

return number;

}

public void setNumber(String number) {

this.number = number;

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于 Python 的一些小工具
下一篇:历史上的今天Flutter小APP
相关文章

 发表评论

暂时没有评论,来抢沙发吧~