前不久的項目時間緊張,為了盡快完成原型開發(fā),寫了一段效率相當?shù)偷拇a。

最近幾天閑下來,主動把之前的代碼優(yōu)化了一下:)

 

標簽:Java、Mybatis、MySQL

概況:本地系統(tǒng)從另外一個系統(tǒng)得到實體類集合List<UserEvent>,但是實體中只有eventId信息,其他屬性值均為空。

需要從數(shù)據(jù)庫中查詢數(shù)據(jù),完善List<UserEvent>的信息并返回。

相關(guān)業(yè)務(wù)表以及對應(yīng)的實體類,如下圖。(為了回避項目信息,相關(guān)業(yè)務(wù)內(nèi)容均省略,以下表名、實體名、代碼變量名等均用字母ABC代替。)

Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),移動開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

原處理

1.先來看代碼,乍一看邏輯清晰,符合正常思維習慣。

但是仔細查看發(fā)現(xiàn),for循環(huán)中的每步處理都和數(shù)據(jù)查詢有關(guān)。假設(shè)有10次循環(huán),每次循環(huán)中有4次數(shù)據(jù)庫連接查詢,一共需要連接數(shù)據(jù)庫40次。

每次數(shù)據(jù)庫連接都需要一定的開銷,隨著循環(huán)量不斷增加,處理時間將成倍增長,造成資源浪費。

Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),移動開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 1  String eventId = ""; 2  String aTime = ""; 3  for (UserEvent event : userEventList) { 4       eventId = event.getEventId(); 5    6       // 獲取業(yè)務(wù)B信息 7       List<EntityB> listB = mapperB.selectBInfoByEventId(eventId); 8       event.setListB(listB); 9   10      // 獲取業(yè)務(wù)C信息11      List<EntityC> listC = mapperC.selectCInfoByEventId(eventId);12      event.setListC(listC);13  14      // 查看是否有業(yè)務(wù)B處理15      EntityB entityB = mapperB.selectBInfoByPrimary(phone, eventId);16      event.setIsActionB(null == entityB ? "false" : "true");17  18      // 獲取業(yè)務(wù)A和用戶信息19      User userInfo = mapperA.selectEventUserInfoByEventId(eventId);20&