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

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

 

標簽:Java、Mybatis、MySQL

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

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

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

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

原處理

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

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

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

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

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

網(wǎng)友評論