1. 程式人生 > >功能總結--mysql、String字串函式的應用及mybatis的批量更新不同欄位

功能總結--mysql、String字串函式的應用及mybatis的批量更新不同欄位

前段時間,做的一個功能:將一個表a1的資料的某些欄位內容與另一張表b1的某些欄位進行比較,相同則更新a1的某2個欄位。

解決思路:因為a1表中的欄位較多有五十多個,所以:

1.首先將a1表中的要比較的資料取出來,進行資料處理,放入物件存入list。

2.利用list的某些屬性過濾去除b1表中的資料。

3.在java中比較,然後批量更新不同欄位。

碰到的問題:

1.a1表中要比較的資料,因為存入時格式比較亂,所以要轉成相應的格式,其中就涉及到對字串的處理(java和mysql)

2.mybatis迴圈批量更新不同欄位

知識點:

1.String的indexOf():

strObj.indexOf(subString[, startIndex])
說明:indexOf 方法返回一個整數值,指出 String 物件內子字串的開始位置。如果沒有找到子字串,則返回 -1。
如果 startindex 是負數,則 startindex 被當作零。如果它比最大的字元位置索引還大,則它被當作最大的可能索引。
從左向右執行查詢。否則,該方法與 lastIndexOf 相同。

功能部分程式碼:

//轉成小寫
String name = writeroff.getPassengerName().toLowerCase();
  if(name.indexOf("miss")>-1||name.indexOf("ms")>-1||name.indexOf("mr")>-1||name.indexOf("mstr")>-1){
	name = name.substring(11);
	writeroff.setPassengerName(name);
   }else{
	writeroff.setPassengerName(name);
	}
2.MySQL的substring_index()函式和CONCAT()函式

substring_index(“待擷取有用部分的字串”,“擷取資料依據的字元”,擷取字元的位置)

CONCAT(str1,str2,…)  

返回結果為連線引數產生的字串。如有任何一個引數為NULL ,則返回值為 NULL。

功能部分程式碼:(mapper.xml)

<sql id="Base_Column_List3">
  excel_id, s6 TicketNo, s13 Pnr, s7 Sector,substring_index(CONCAT(b4,d1),'.',1) Flight_no,s2 trvaleDate,s3   passengerName
</sql>
3.mybatis批量更新不同的欄位

本文用的方法:原生sql如下:

UPDATE categories 
 SET display_order = CASE id 
  WHEN 1 THEN 3 
  WHEN 2 THEN 4 
  WHEN 3 THEN 5 
 END
WHERE id IN (1,2,3)
這句sql的意思是,更新display_order 欄位,如果id=1 則display_order 的值為3,如果id=2 則 display_order 的值為4,如果id=3 則 display_order 的值為5。
即是將條件語句寫在了一起。這裡的where部分不影響程式碼的執行,但是會提高sql執行的效率。確保sql語句僅執行需要修改的行數,這裡只有3條資料進行更新,而where子句確保只有3行資料執行。

功能部分程式碼:

mapper檔案:(其中)

//批量更新核銷狀態和ticketid
int updateWriteroff(@Param("updateParam") Map<Long,String> updateParam);
mapper.xml:
<update id="updateWriteroff" parameterType="java.util.Map">
    update excel_content set writeoff_status = 1,writeoff_time = now(),ticket_Id = 
    <foreach collection="updateParam.entrySet()" item="value" index="key" 
        separator=" " open="case excel_id" close="end">
        when #{key} then #{value}
    </foreach>
    where excel_id in
    <foreach collection="updateParam.entrySet()" index="key" item="value" 
        separator="," open="(" close=")">
        #{key}
    </foreach>
</update>
這個mapper.xml涉及到的知識點有map的entrySet(),遍歷取出key,value,將key值存入index中,value值存入item中。

好的,今天這個核銷功能的就總結到這裡,希望裡面有的的東西能幫到你。

及時總結及時鞏固,希望有一天不用加班填坑