前不久的项目时间紧张,为了尽快完成原型开发,写了一段效率相当低的代码。
最近几天闲下来,主动把之前的代码优化了一下:)
标签:Java、Mybatis、MySQL
概况:本地系统从另外一个系统得到实体类集合List<UserEvent>,但是实体中只有eventId信息,其他属性值均为空。
需要从数据库中查询数据,完善List<UserEvent>的信息并返回。
相关业务表以及对应的实体类,如下图。(为了回避项目信息,相关业务内容均省略,以下表名、实体名、代码变量名等均用字母ABC代替。)

原处理
1.先来看代码,乍一看逻辑清晰,符合正常思维习惯。
但是仔细查看发现,for循环中的每步处理都和数据查询有关。假设有10次循环,每次循环中有4次数据库连接查询,一共需要连接数据库40次。
每次数据库连接都需要一定的开销,随着循环量不断增加,处理时间将成倍增长,造成资源浪费。
1 String eventId = ""; 2 String aTime = ""; 3 for (UserEvent event : userEventList) { 4 eventId = event.getEventId(); 5 6 // 获取业务B信息 7 List<EntityB> listB = mapperB.selectBInfoByEventId(eventId); 8 event.setListB(listB); 9 10 // 获取业务C信息11 List<EntityC> listC = mapperC.selectCInfoByEventId(eventId);12 event.setListC(listC);13 14 // 查看是否有业务B处理15 EntityB entityB = mapperB.selectBInfoByPrimary(phone, eventId);16 event.setIsActionB(null == entityB ? "false" : "true");17 18 // 获取业务A和用户信息19 User userInfo = mapperA.selectEventUserInfoByEventId(eventId);20&

