不要在循环中操作数据库(案例)

各位在写代码的时候千万不要在循环中对数据库进行操作,这样会大大降低数据库的性能,今天在写接口的时候碰到了这种情况,被组长说了一下,于是改了改,代码奉上:

    @Overridepublic List<ScrInspectionVo> selectByMcId(String id) {List<ScrInspectionVo> inspectionVos = this.list(new LambdaQueryWrapper<ScrInspection>().eq(ScrInspection::getMcId,id).orderByDesc(ScrInspection::getSort)).stream().map(scrInspection -> {ScrInspectionVo scrInspectionVo = new ScrInspectionVo();scrInspectionVo.setId(scrInspection.getId());scrInspectionVo.setMcId(scrInspection.getMcId());scrInspectionVo.setItemId(scrInspection.getItemId());scrInspectionVo.setStatus(scrInspection.getStatus());scrInspectionVo.setCreateTime(scrInspection.getCreateTime());scrInspectionVo.setSort(scrInspection.getSort());scrInspectionVo.setType(scrInspection.getType());scrInspectionVo.setCreateBy(scrInspection.getCreateBy());//项目筛查数据处理if (scrInspection.getType().equals(ScreeningConst.PROJECT_SCREENING)){//根据检查项目id查询检查项目名称CheckItemTreeVO checkItemTreeVO = remoteKnowledgeApi.selectOne(scrInspection.getItemId(), SecurityConstants.FROM_IN);scrInspectionVo.setInspectionName(checkItemTreeVO.getClassifyName());}//流调筛查数据处理if (scrInspection.getType().equals(ScreeningConst.EPIDEMIC_SCREENING)){List<ScrInspectionQuestionVo> scrInspectionQuestionVos = this.selectByQuestionList(ScreeningConst.EPIDEMIC_SCREENING);scrInspectionQuestionVos.stream().forEach(s->{scrInspectionVo.setInspectionName(s.getTextName());});}return scrInspectionVo;}).collect(Collectors.toList());return inspectionVos;

其中selectByQuestionList和selectOne方法都是调用的其他服务的,全是在循环中调用的接口,这样对于数据库来说的话会有很大压力,所以经过我的整改,写了两个方法,代码奉上:

  @Override@ConverData(serviceId = ServiceNameConstants.KNOWLEDGE_SERVICE, table = "knowledge_check_item", key = "itemId", dbKey = "id", dbValue = "classify_name", value = "inspectionName")public List<ScrInspectionVo> selectByMcId(String id) {//根据医联体id查询出医联体下的所有数据List<ScrInspection> scrInspections = this.list(new LambdaQueryWrapper<ScrInspection>().eq(ScrInspection::getMcId, id).orderByDesc(ScrInspection::getSort));//项目筛查List<ScrInspection> project = scrInspections.stream().filter(x -> x.getType()==1).collect(Collectors.toList());//流调筛查List<ScrInspection> epidemiological= scrInspections.stream().filter(liu -> liu.getType()==0).collect(Collectors.toList());List<ScrInspectionVo> projectList = initPro(project);List<ScrInspectionVo> epList = initEp(epidemiological);List<ScrInspectionVo> vos = new ArrayList<ScrInspectionVo>(projectList);vos.addAll(epList);return vos;}List<ScrInspectionVo> initPro(List<ScrInspection> pro){if (CollUtil.isEmpty(pro)){return new ArrayList<>();}return pro.stream().map(p->{ScrInspectionVo scrInspectionVo = new ScrInspectionVo();BeanUtils.copyProperties(p,scrInspectionVo);return scrInspectionVo;}).collect(Collectors.toList());}List<ScrInspectionVo> initEp(List<ScrInspection> epidemiological){if (CollUtil.isEmpty(epidemiological)){return new ArrayList<>();}//获取到itemId列表List<String> epIds = epidemiological.stream().map(ScrInspection::getItemId).collect(Collectors.toList());FormListModel formListModel = new FormListModel();formListModel.setFormKeys(epIds);//返回问卷列表List<FormListVO> epList = remoteMessageApi.getFromList(formListModel, SecurityConstants.FROM_IN).getData();List<ScrInspectionVo> scrInspectionVos = epidemiological.stream().map(s -> {ScrInspectionVo scrInspectionVo = new ScrInspectionVo();BeanUtils.copyProperties(s, scrInspectionVo);for (FormListVO formListVO : epList) {if (s.getItemId().equals(formListVO.getFormKey())){scrInspectionVo.setInspectionName(formListVO.getTextName());}}return scrInspectionVo;}).collect(Collectors.toList());return scrInspectionVos;}

先根据mcId查询出所有数据,然后对这些数据根据条件进行分组,然后自己写两个方法,这样就避免了在循环中重复调用方法,其中initPro和initEp就是我写的两个方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/26719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ECharts 折线图使用相关

一、折线图堆叠设置为不堆叠的方法 官网是这样的&#xff0c;但是不需要这种堆叠形式的如下图&#xff1a; 即&#xff1a;第2条数据值 第1条数据值 第2条数据值 ​​​​​​​ 第3条数据值 第2条数据值 第3条数据值 需要改成实际值展示&#xff0c;如下图&#xff1a; 只…

数据结构之栈和队列---c++

栈和队列的简单介绍 栈 栈是一个“先进后出”结构 队列 入队演示 队列是一种“先进先出”的结构 出队演示 接下来我们开始本次的内容 栈实现队列 分析 1.我们可以老老实实的写一个栈然后将所有的接口函数实现出来&#xff0c;最后再进行实现队列&#xff0c;但是显然…

Python爬取中国天气网获取全国城市编码并存入MySQL数据库

Python爬取中国天气网获取全国城市编码并存入MySQL数据库 上代码 上代码 import re import requests import pymysql# 定制请求头 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.…

springboot,swagger多个mapper包,多个controller加载问题

启动类添加MapperScan({"xxx.xxx.xxx.mapper","xxx.xxx.xxx.mapper"}) swagger配置类添加 Bean public Docket api01() {return new Docket(DocumentationType.SWAGGER_2)//.enable(swagger_is_enabl).apiInfo(new ApiInfoBuilder().title("你的title…

【雕爷学编程】Arduino动手做(193)---移远 BC20 NB+GNSS模块7

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

【数学建模学习(9):模拟退火算法】

模拟退火算法(Simulated Annealing, SA)的思想借 鉴于固体的退火原理&#xff0c;当固体的温度很高的时候&#xff0c;内能比 较大&#xff0c;固体的内部粒子处于快速无序运动&#xff0c;当温度慢慢降 低的过程中&#xff0c;固体的内能减小&#xff0c;粒子的慢慢趋于有序&a…

空地协同智能消防系统——无人机、小车协同

1 题目 1.1 任务 设计一个由四旋翼无人机及消防车构成的空地协同智能消防系统。无人机上安装垂直向下的激光笔&#xff0c;用于指示巡逻航迹。巡防区域为40dm48dm。无人机巡逻时可覆盖地面8dm宽度区域。以缩短完成全覆盖巡逻时间为原则&#xff0c;无人机按照规划航线巡逻。发…

2019年09月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题 第1题 关于Python的编程环境,下列的哪个表述是正确的? A:Python的编程环境是图形化的; B:Python只有一种编程环境ipython; C:Python自带的编程环境是IDLE; D:用windows自带的文本编辑器也可以给Python编程?,并且也可以在该编辑器下运行; 正确答案…

自动驾驶传感器选型

360的场景&#xff0c;避免有盲区&#xff0c;长距离 Lidar&#xff08;激光雷达&#xff09; 典型特点一圈一圈的&#xff0c;轮廓和很高的位置精度 禾赛的机械雷达 速腾的固态雷达 固态雷达是车规级的&#xff0c;车规级的意思是可以装到量产车上 Radar&#xff08;毫米…

门面模式(C++)

定义 为子系统中的一组接口提供一个一致(稳定) 的界面&#xff0c;Facade模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用(复用)。 应用场景 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合&#xff0c;随着外部客户程序和各子…

小研究 - MySQL 数据库安全加固技术的研究(二)

随着信息系统的日益普及&#xff0c;后台数据库的安全问题逐步被人们重视起来。以当下热门的MySQL 数据库为例&#xff0c;通过分析数据库的安全机制以及总结数据库面临的安全风险&#xff0c;针对性地提出了相应的加固策略&#xff0c;为数据库的安全加固工作提供了技术支撑。…

数据结构—哈夫曼树及其应用

5.6哈夫曼树及其应用 5.6.1哈夫曼树的基本概念 路径&#xff1a;从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。 结点的路径长度&#xff1a;两结点间路径上的分支数。 树的路径长度&#xff1a;从树根到每一个结点的路径长度之和。记作 TL 结点数目相同的…

【jvm】jvm整体结构(hotspot)

目录 一、说明二、java代码的执行流程三、jvm的架构模型3.1 基于栈式架构的特点3.2 基于寄存器架构的特点 一、说明 1.hotspot vm是目前市场上高性能虚拟机的代表作之一 2.hotspot采用解释器与即时编译器并存的架构 3.java虚拟机是用来解释运行字节码文件的&#xff0c;入口是字…

混合云环境实现K8S可观测的6大策略

2023年&#xff0c;原生云应用及平台发展迅猛。大量企业都在努力发挥其应用程序的最大潜力&#xff0c;以确保极致的用户体验并推动业务增长。 混合云环境的兴起和容器化技术(如Kubernetes)的采用彻底改变了现代应用程序的开发、部署和扩展方式。 在这个数字舞台上&#xff0c;…

命令模式 Command Pattern 《游戏设计模式》学习笔记

对于一般的按键输入&#xff0c;我们通常这么做&#xff0c;直接if按了什么键&#xff0c;就执行相应的操作 在这里我们是将用户的输入和程序行为硬编码在一起&#xff0c;这是我们很自然就想到的最快的做法。 但是如果这是一个大型游戏&#xff0c;往往我们需要实现一个按键…

研发工程师玩转Kubernetes——hostPath

有别于《研发工程师玩转Kubernetes——emptyDir》一文中介绍的emptyDir&#xff0c;hostPath可以在同一个Node的不同Pod间共享卷。 下面的清单文件利用了Pod亲和性&#xff0c;让Pod集中到一个Node上。 apiVersion: apps/v1 kind: Deployment metadata:name: hostpath-deploy…

中间人攻击

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、启动 Kali Linux准备 Apache 服务器使用Ettercap插件进行欺骗使用 Wireshark 捕获 Https 流量总结 前言 您可能已经熟悉中间人攻击&#xff1a;攻击者通过…

笙默考试管理系统-MyExamTest----classranking(4)

笙默考试管理系统-MyExamTest----classranking&#xff08;4&#xff09; 目录 一、 笙默考试管理系统-MyExamTest----classranking 二、 笙默考试管理系统-MyExamTest----classranking 三、 笙默考试管理系统-MyExamTest----classranking 四、 笙默考试管理系统-MyExam…

遍历Map集合的四种方式

Map 集合的遍历与 List 和 Set 集合不同。Map 有两组值&#xff0c;因此遍历时可以只遍历值的集合&#xff0c;也可以只遍历键的集合&#xff0c;也可以同时遍历。 Map 以及实现 Map 的接口类&#xff08;如 HashMap、TreeMap、LinkedHashMap、Hashtable 等&#xff09;都可以…

网络安全(秋招)如何拿到offer?(含面试题)

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…