for循环里使用查询如何优化(代码库)
for循环里的查询,只是为了赋值对象中的一个字段,如果每一个都重新查一下数据库,影响效率
应该先进行查询,然后再循环里组装自己需要的业务数据
如下代码:list1 查询出对象的一部分内容,list2 查询出对象的另一部分内容,然后在for循环里组装这个对象。
其中关键点是:循环里嵌套的循环,每次遍历完数据以后,再remove掉,注意list的remove方法
public List<Timetable> listTimetableByUserAndTime(Long userId, Integer userType, Date leftDate, Date rightDate) {
List<Lesson> list1 = courseService.listLessonByStudentIdAndTime(userId, leftDate, rightDate);
if (list1 == null || list1.isEmpty()) {
return new ArrayList<>();
}
List<Timetable> list2 = courseService.listLessonByUserIdAndUserTypeAndLessonId(userId, userType, list1);
if (list2 == null) {
list2 = new ArrayList<>();
}
List<Timetable> ansList = new ArrayList<>();
for (Lesson lesson : list1) {
Timetable timetable = new Timetable();
timetable.setUserId(userId);
timetable.setUserType(userType);
timetable.setLessonId(lesson.getId());
timetable.setLessonTime(DateUtil.convertDateToLong(lesson.getStartTime()));
//循环赋值
if (list2.isEmpty()) {
timetable.setWatchState(0);
} else {
boolean flag = true;
for (int i = 0; i < list2.size(); i++) {
Timetable tmp = list2.get(i);
//两个实体类的代码进行相等比较,更好的方法是重写equals,这里不考虑了
if (timetable.getUserId().equals(tmp.getUserId()) && timetable.getUserType().equals(tmp.getUserType()) && timetable.getLessonId().equals(tmp.getLessonId())) {
//如果相等,赋值以后,还要从list里移除,跳出循环
flag = false;
timetable.setId(tmp.getId());
timetable.setWatchState(tmp.getWatchState());
list2.remove(i);
break;
}
}
//没有找到相同的实体
if (flag) {
timetable.setWatchState(0);
}
}
ansList.add(timetable);
}
return ansList;
}
PS:刚开始我总觉还有一种办法,就是在使用mybatis的时候,有没有可能,传的参数是List对象,返回的值直接赋值到这个参数里的List对象里,这样就最简单了,但是搜了半天都没有这个这个功能
原创文章,欢迎转载,转载请注明出处!
for循环里使用查询如何优化(代码库)的更多相关文章
- 为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作?
在阅读<阿里巴巴Java开发手册>时,发现有一条关于在 foreach 循环里进行元素的 remove/add 操作的规约,具体内容如下: 错误演示 我们首先在 IDEA 中编写一个在 f ...
- 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile
通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...
- 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数
通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...
- 通过游戏学python 3.6 第一季 第七章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号
#猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误 ...
- 通过游戏学python 3.6 第一季 第六章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改 可复制直接使用 娱乐 可封装 函数
#猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优 ...
- 高性能MySQL笔记 第6章 查询性能优化
6.1 为什么查询速度会慢 查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...
- MySql学习—— 查询性能优化 深入理解MySql如何执行查询
本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...
- SQL中的连接查询及其优化原则
连接查询是SQL的主要任务,只有很好的掌握了连接查询及其优化方法才算是掌握了SQL的精髓所在.最近在面试中遇到了有关连接查询的问题,感觉回答的不是很好,总结一下. 具体示例请参考:http://www ...
随机推荐
- 虚拟主机、VPS主机与云服务器的区别
本文转载自星光云 http://www.365yun.top/news/list.asp?newsid=22 虚拟主机是利用虚拟技术将一台物理服务器划分成多个“虚拟”服务器,虚拟主机的出现大大节省了服 ...
- 环境设置——pyCharm环境下导入MySQLdb遇到的一系列问题
本文转自http://blog.sina.com.cn/s/blog_135031dae0102yc8l.html 安装好pyCharm后想要import MySQL,结果发现了一系列问题,像推到了塔 ...
- Jquery 使用和Jquery选择器
jQuery中的顶级对象($) jQuery 中最常用的对象即 $ 对象,要想使用 jQuery 的方法必须通过 $ 对象.只有将普通的 Dom 对象封装成 jQuery 对象,然后才能调用 jQue ...
- Android studio设置文件头,定制代码注释
一.说明 在下载或者看别人的代码我们常会看见,每一个文件的上方有个所属者的备注.如果要是一个一个备注那就累死了. 二.设置方法 File >>> Setting >>&g ...
- 【NodeJS】Node.JS 开发环境安装
1.前言 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O ...
- Vue CLI 3.0脚手架如何在本地配置mock数据
前后端分离的开发模式已经是目前前端的主流模式,至于为什么会前后端分离的开发我们就不做过多的阐述,既然是前后端分离的模式开发肯定是离不开前端的数据模拟阶段. 我们在开发的过程中,由于后台接口的没有完成或 ...
- ORACLE中关于表的一些特殊查询语句
1: 如何判断字段的值里面:那些数据包含小写字母或大小字母 判断字段NAME的值里面有小写字母的记录 方式1: SELECT NAME FROM TEST WHERE regexp_like(NAME ...
- Unity ECS 视频笔记
视频摘要 本文视频资料:使用Entity Component System开发<快乐的Minecraft>游戏 使用Unity2018及以上版本才有ECS功能. 本文是看视频的一些摘要. ...
- 苹果绿RGB值
ESL的值为:85,123,205 RGB的值为:199,237,204 ESL和RGB只需填一个即可,另一个会自动调整~
- Django-CRM项目学习(五)-stark的action以及多级筛选功能
1.stark的组件之action(自定制函数多选功能效果) 1.1 admin效果 1.2 多选效果前端和后端进行的操作 1.2.1 前端发过来的参数是?号后各个参数用&来拼接 1.2.2 ...