当前位置: 首页 > news >正文

sql语句-实体属性有集合怎么批量查询

1、背景

前端返回一个实体类,实体类里还有集合。要对集合外的属性查询,还要对集合批量查询,并且属性可能为空。返回给前端的结果是个实体类,实体类里有集合。

2、前端实体类

public class AppletSyncDiseaseInfoBO {// 病害信息同步接口/*** 组织id*/private Integer organizationId;/*** 最后一次同步时间,病害更新时间小于此时间的不同步,可为空*/private String lastSyncTime;/*** 返回结果中的坐标系WGS84等,待约定*/private String coordinate;/*** 路面类型:沥青A,水泥D*/private char roadSurface;/*** 病害集合*/private List<AppletDiseaseInfoBO> disease;
}
public class AppletDiseaseInfoBO {/*** 病害类型*/private String proType;/*** 筛选上限,为空则不做筛选*/private Double upperLimit;/*** 筛选下限,为空则不做筛选*/private Double lowerLimit;}

3、返回给前端的实体类

public class AppletDiseaseInfoVO {/*** 组织id*/private Integer organizationId;/*** 接口调用结果返回时间*/private String nowTime;/*** 返回结果中的坐标系WGS84等,待约定*/private String coordinate;List<AppletDiseaseVO> problem;
}
public class AppletDiseaseVO extends AppletDiseaseBO {/*** 病害id*/private Integer proId;/*** 识别任务id*/private Integer subId;/*** 图片id*/private Integer picId;/*** 病害类型*/private String proType;/*** 病害名称*/private String proName;/*** 经度*/private Double lon;/*** 纬度*/private Double lat;/*** 道路id*/private Integer roadId;/*** 道路区间id*/private Integer roadIntervalId;/*** 道路方向,上行U;下行D*/private char roadDirection;/*** 桩号*/private Integer chainage;/*** 桩号偏移量*/private Double chainageOffset;/*** 影响面积或长度*/private Double proDestroy;/*** 原始图片地址*/private String picUrl;/*** 病害发现时间*/private String findTime;
}

4、sql语句

    <resultMap id="syncDiseaseInfoMap" type="com.jzsk.presentation.pojo.vo.AppletSyncDiseaseInfoVO"><result column="organization_id" property="organizationId"/>-- 以下就是映射到集合里<collection property="problem"  javaType="java.util.List" resultMap="problemsMap"/></resultMap><resultMap id="problemsMap" type="com.jzsk.presentation.pojo.bo.AppletDiseaseBO"><result column="proId" property="proId"/><result column="rec_sub_id" property="subId"/><result column="picId" property="picId"/><result column="pro_type" property="proType"/><result column="pro_name" property="proName"/><result column="gps_lon" property="lon"/><result column="gps_lat" property="lat"/><result column="road_id" property="roadId"/><result column="interval_id" property="roadIntervalId"/><result column="road_direction" property="roadDirection"/><result column="chainage" property="chainage"/><result column="chainage_offset" property="chainageOffset"/><result column="pro_destroy" property="proDestroy"/><result column="photo_name" property="photoName"/><result column="output_path" property="outputPath"/><result column="reported_time" property="findTime"/><result column="is_review" property="isReview"/></resultMap><select id="syncDiseaseInfo" parameterType="com.jzsk.presentation.pojo.bo.AppletSyncDiseaseInfoBO"resultMap="syncDiseaseInfoMap">SELECTrrp.organization_id,rrp.id as proId,rrp.rec_sub_id,cp.id AS picId,rrp.pro_type,rrp.pro_name,rrp.gps_lon,rrp.gps_lat,rl.road_id,rs.interval_id,rl.road_direction,rrp.chainage,rrp.chainage_offset,rrp.pro_destroy,rr.photo_name,rs.output_path,rs.reported_time,rs.lane,rr.is_reviewFROMrec_result_problem rrp-- 连表的时候 先去查出子表 加快检索效率 LEFT JOIN (SELECT rresult.id,rresult.photo_name,rresult.is_review FROM rec_result rresult WHERE rresult.organization_id = #{organizationId}) AS rr ON rrp.rec_result_id = rr.idLEFT JOIN (SELECT rsubmit.id,rsubmit.interval_id,rsubmit.output_path,rsubmit.reported_time,rsubmit.lane,rsubmit.pavement_type,rsubmit.locus_id FROM rec_submit rsubmit WHERE rsubmit.organization_id = #{organizationId}) AS rs ON rrp.rec_sub_id = rs.idLEFT JOIN (SELECT rlocus.road_id,rlocus.id,rlocus.road_direction FROM road_locus rlocus WHERE rlocus.organization_id = #{organizationId}) AS rl ON rl.id = rs.locus_idLEFT JOIN (SELECT ctask.interval_id,ctask.id FROM capture_task ctask WHERE ctask.organization_id = #{organizationId}) AS ct ON ct.interval_id = rs.interval_idLEFT JOIN (SELECT cphoto.task_id,cphoto.id FROM capture_photo cphoto WHERE cphoto.organization_id = #{organizationId}) AS cp ON cp.task_id = ct.idWHERErrp.organization_id = #{organizationId}<if test="lastSyncTime != null and lastSyncTime != ''">AND rrp.create_time &gt;= #{lastSyncTime}</if><if test="roadSurface != null and roadSurface != ''">AND rs.pavement_type = #{roadSurface}</if>-- 判断传入的集合是否为空-- 如果传入的是数组 就用 <if test="disease != null and disease.length > 0"><if test="disease != null and disease.size() > 0">AND<foreach collection="disease" item="diseaseInfo" open="(" close=")" separator=" OR ">-- separator=" OR " 和 这个括号是精髓-- 比如你传入(A) OR (B) 这里就会取结果的并集-- 如果不加括号 只是 A OR B ,那么满足一个条件就会返回数据(<if test="diseaseInfo.proType != null and diseaseInfo.proType != ''">rrp.pro_type = #{diseaseInfo.proType}</if><if test="diseaseInfo.upperLimit != null">AND rrp.pro_destroy &lt;= #{diseaseInfo.upperLimit}</if><if test="diseaseInfo.lowerLimit != null">AND rrp.pro_destroy &gt;= #{diseaseInfo.lowerLimit}</if>)</foreach></if></select>

5、其他

如果你只是传入一个集合进行查询

mapper接口要加 @parm("")注解

5.1、maapper层接口
ResultSectionBO querySectionChainageBySubId(@Param("idList") List<Integer> idList);
5.2、sql语句
    <select id="querySectionChainageBySubId"  resultType="com.jzsk.presentation.pojo.bo.ResultSectionBO">SELECT MIN(chainage*1000+chainage_offset) AS minChainage,MAX(chainage*1000+chainage_offset) AS maxChainageFROM REC_RESULT WHERE is_del='N'<if test="idList != null and idList.size >0">AND rec_sub_id IN<foreach collection="idList" index="index" item="item" open="(" separator="," close=")">#{item}</foreach></if></select>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • react 修改less文件后保存,内存溢出,项目崩溃问题解决
  • 解锁潜在商机的钥匙——客户管理系统公海池
  • maven打包可运行jar
  • 计算机视觉与深度学习 | 视频/图像转换及保存播放(Matlab源码)
  • 基于arm-gcc 工具链开发mcu程序时,怎么便捷查看内存映像
  • selenium headless 无头模式慢
  • SpringBoot3+Vue3+Mysql+Element Plus完成数据库存储blob类型图片,前端渲染后端传来的base64类型图片
  • CSS 的 link 标签放在 head 标签之间的作用
  • 直播会议一体机安卓主板_5G智能会议一体机双屏异显设计
  • Delphi 12 重返雅典 (RAD Studio 12)
  • 华为云Ascend310服务器使用
  • Git系列之Git集成开发工具及git扩展使用
  • Android codec2 视频框架 之输入buffer
  • Perl语言用多线程爬取商品信息并做可视化处理
  • 网络安全之文件包含漏洞及其防护
  • 收藏网友的 源程序下载网
  • __proto__ 和 prototype的关系
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【剑指offer】让抽象问题具体化
  • angular学习第一篇-----环境搭建
  • ESLint简单操作
  • vue--为什么data属性必须是一个函数
  • 订阅Forge Viewer所有的事件
  • 分布式事物理论与实践
  • 关于Java中分层中遇到的一些问题
  • 两列自适应布局方案整理
  • 如何使用 JavaScript 解析 URL
  • 微信小程序:实现悬浮返回和分享按钮
  • 我建了一个叫Hello World的项目
  • 学习使用ExpressJS 4.0中的新Router
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #微信小程序:微信小程序常见的配置传旨
  • (不用互三)AI绘画工具应该如何选择
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (论文阅读11/100)Fast R-CNN
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)c52学习之旅-点亮LED灯
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)Google的Objective-C编码规范
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET Core中的去虚
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .net反混淆脱壳工具de4dot的使用
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @ModelAttribute使用详解
  • @Transaction注解失效的几种场景(附有示例代码)
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [c++刷题]贪心算法.N01
  • [Cesium学习]