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

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

 

標(biāo)簽:Java、Mybatis、MySQL

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

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

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

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

原處理

1.先來(lái)看代碼,乍一看邏輯清晰,符合正常思維習(xí)慣。

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

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

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(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和用戶(hù)信息19      User userInfo = mapperA.selectEventUserInfoByEventId(eventId);20&
        
		

網(wǎng)友評(píng)論