博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
for循环里使用查询如何优化(代码库)
阅读量:6084 次
发布时间:2019-06-20

本文共 2351 字,大约阅读时间需要 7 分钟。

  for循环里的查询,只是为了赋值对象中的一个字段,如果每一个都重新查一下数据库,影响效率

  应该先进行查询,然后再循环里组装自己需要的业务数据

  如下代码:list1 查询出对象的一部分内容,list2 查询出对象的另一部分内容,然后在for循环里组装这个对象。

  其中关键点是:循环里嵌套的循环,每次遍历完数据以后,再remove掉,注意list的remove方法

 

1 public List
listTimetableByUserAndTime(Long userId, Integer userType, Date leftDate, Date rightDate) { 2 List
list1 = courseService.listLessonByStudentIdAndTime(userId, leftDate, rightDate); 3 if (list1 == null || list1.isEmpty()) { 4 return new ArrayList<>(); 5 } 6 List
list2 = courseService.listLessonByUserIdAndUserTypeAndLessonId(userId, userType, list1); 7 if (list2 == null) { 8 list2 = new ArrayList<>(); 9 }10 11 List
ansList = new ArrayList<>();12 for (Lesson lesson : list1) {13 Timetable timetable = new Timetable();14 timetable.setUserId(userId);15 timetable.setUserType(userType);16 timetable.setLessonId(lesson.getId());17 timetable.setLessonTime(DateUtil.convertDateToLong(lesson.getStartTime()));18 19 //循环赋值20 if (list2.isEmpty()) {21 timetable.setWatchState(0);22 } else {23 boolean flag = true;24 for (int i = 0; i < list2.size(); i++) {25 Timetable tmp = list2.get(i);26 //两个实体类的代码进行相等比较,更好的方法是重写equals,这里不考虑了27 if (timetable.getUserId().equals(tmp.getUserId()) && timetable.getUserType().equals(tmp.getUserType()) && timetable.getLessonId().equals(tmp.getLessonId())) {28 //如果相等,赋值以后,还要从list里移除,跳出循环29 flag = false;30 timetable.setId(tmp.getId());31 timetable.setWatchState(tmp.getWatchState());32 list2.remove(i);33 break;34 }35 }36 //没有找到相同的实体37 if (flag) {38 timetable.setWatchState(0);39 }40 }41 ansList.add(timetable);42 }43 44 return ansList;45 }

 

PS:刚开始我总觉还有一种办法,就是在使用mybatis的时候,有没有可能,传的参数是List对象,返回的值直接赋值到这个参数里的List对象里,这样就最简单了,但是搜了半天都没有这个这个功能

原创文章,欢迎转载,转载请注明出处!

你可能感兴趣的文章
终结2011,吹响2012的号角
查看>>
mysql 免安装版安装(window7)
查看>>
创建可以销毁的对象代码段
查看>>
python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据
查看>>
python fabric实现远程操作和部署
查看>>
html实现用户注册页面(表单+表格)——html小练习
查看>>
WebService开发常见问题
查看>>
Tomcat 部署方式
查看>>
C# 基础学习 之 深复制和浅复制
查看>>
C结构体中数据的内存对齐问题
查看>>
QT 布局管理器的使用
查看>>
Noip2015提高组解题报告
查看>>
评论挖掘,准备研究下
查看>>
tcpdump使用
查看>>
查看自己电脑上安装了什么数据库
查看>>
网页布局基础 第三次(浮动布局)
查看>>
为什么网页中上传文件的表单里要加个属性enctype【转载】
查看>>
20+ 个很有用的 jQuery 的 Google 地图插件 (英语)
查看>>
php生产随机数
查看>>
javascript call和apply
查看>>