MyBatis动态SQL如何实现前端指定返回字段
作者:iSetYu 发布时间:2023-11-28 23:00:58
标签:MyBatis,动态SQL,返回字段
动态SQL实现前端指定返回字段
问题描述
在使用ClickHouse时,遇到需要根据业务需求,动态返回指定字段,从而充分利用ClickHouse列式存储的优势。
解决方案
可用MyBatis的动态SQL进行数据返回;故可在业务层将指定返回的列传入数据层,利用foreach标签进行遍历返回数据。
代码实现
1.请求参数
@Data
public class QueryDTO {
/**
* 返回值
*/
private Set<String> targetFields;
}
2.mapper接口
/**
* 查询数据
* @param record
* @return
*/
List<ResourceTotal> query(QueryDTO record);
3.mapper.xml实现
<sql id="Base_Result_Column">
resourceId, platformCount, createUserId
</sql>
<select id="query" parameterType="cn.example.module.data.test.QueryDTO" resultMap="BaseResultMap">
select
<foreach collection="targetFields" item="item" separator=",">
${item}
</foreach>
,
<include refid="Base_Result_Column"/>
from resource_total
where 1 = 1
</select>
4.注意事项
a.使用动态返回字段时,不可使用预先编译,故foreach中使用‘$’符号,而不使用‘#’;
b.foreach标签后若还有其他固定字段返回,记得用逗号‘,’分隔。
MyBatis如何返回部分字段
mybatis 返回部分字段,这里介绍两种方式(主推第一种)
.xml文件中resultMap的type改为
java.util.HashMap 即可
其余代码都不用写, 亲测可用,xml文件中代码如下:
<!-- 返回类型 -->
<resultMap id="testRestMap" type="java.util.HashMap">
<result column="province_name" jdbcType="VARCHAR" property="provinceName" />
<result column="area_name" jdbcType="VARCHAR" property="areaName" />
<result column="lane_num" jdbcType="VARCHAR" property="laneNum" />
<result column="road_name" jdbcType="VARCHAR" property="roadName" />
</resultMap>
<!--sql查询 -->
<select id="selTest" resultMap="testRestMap">
select
province_name,
area_name,lane_num,
road_name
from site_info
where 1=1
and del_flag='0'
</select>
第二种很笨的方法
重新新建一个对象实体,该实体文件的字段与要返回的 “部分字段” 一一对应即可,代码如下:
resultMap 的type=com.sinosoft.pojo.DeviceNumber 指向一个文件,该文件为新建实体类,里面是要返回的 “部分字段”
<!-- 全省设备数量统计 数据返回 -->
<resultMap id="DeviceNumber" type="com.sinosoft.pojo.DeviceNumber">
<result column="distCode" jdbcType="VARCHAR" property="distCode" />
<result column="distName" jdbcType="VARCHAR" property="distName" />
<result column="number" jdbcType="VARCHAR" property="number" />
</resultMap>
<!-- 全省设备数量统计 -->
<select id="statisticsDevice" resultMap="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
</select>
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(String 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;
}
}
来源:https://blog.csdn.net/lester_8/article/details/105279302


猜你喜欢
- 本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类、BitmapData类和Graphics类是C#处理图像的的3个
- 先为啥要纯手工打造呢,因为对方是用C++做的,我按照他们给出的WSDL实现了一个WebService,结果他们完全不能调用。具体是他们调用的
- Unity 有点击屏幕进行移动操作,通过Input.GetMouseButtonDown(0)。如果点击到了一些UI上面会触发点击屏幕事件。
- android去掉滑动到顶部和底部的阴影<ListViewandroid:id="@+id/listView"an
- 内网用户或 * 的用户使用 using System.IO; using System.Net; public string get_ht
- View的平滑滚动效果什么是实现View的平滑滚动效果呢,举个简单的例子,一个View从在我们指定的时间内从一个位置滚动到另外一个位置,我们
- 一、实现效果图关于贝塞尔曲线 二、实现代码1.自定义viewpackage com.czhappy.showintroduce.view;i
- 本文实例讲述了java实现将结果集封装到List中的方法。分享给大家供大家参考,具体如下:import java.sql.Connectio
- 1、静态函数只能在声明它的文件中可见,其他文件不能引用该函数。2、不同的文件可以使用相同名字的静态函数,互不影响。3、使用static声明的
- 这篇文章主要介绍了RabbitMQ延迟队列及消息延迟推送实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 在开发过程中,我们需要统一返回前端json格式的数据,但有些接口的返回值存在 null或者""这种没有意义的字段。不仅影
- 如何解决yml没有spring小叶子标志我的idea springboot项目中有两个.yml文件,一个application.yml,一个
- 本文实例讲述了Java Scanner类用法及nextLine()产生的换行符问题。分享给大家供大家参考,具体如下:分析理解:Scanner
- 1.前言MyBatis框架大家肯定都用过的,废话我就不再多说了,这篇文章就给大家分享一下有关MyBatis框架底层的执行原理吧(Debug!
- 本文实例讲述了C#导出文本内容到word文档的方法。分享给大家供大家参考。具体实现方法如下:<%@ Page Language=&qu
- springboot整合mybatis实现数据库更新批处理1.在mapper接口中编写方法/** * 修改book表中的销量和库存
- Android 自定义dialog的实现代码搜索相关关键字网上一大堆实现,但是看完总觉得缺胳膊少腿,绕了不少弯路,终于弄好了自定义dialo
- Android标题栏最右边添加按钮的实例step1:重写activity的onCreateOptionsMenu方法@Override pu
- 前言我们在配置Spring Xml配置文件的时候,可以在文件路径字符串中加入 ${} 占位符,Spring会自动帮我们解析占位符,这么神奇的
- 一、函数和变量的多文件问题.h: 头文件,一般包含函数声明,变量声明,宏定义,头文件等内容(header).c : 源文件,一般包含函数实现