功能總結--mysql、String字串函式的應用及mybatis的批量更新不同欄位
阿新 • • 發佈:2019-01-27
前段時間,做的一個功能:將一個表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])
如果 startindex 是負數,則 startindex 被當作零。如果它比最大的字元位置索引還大,則它被當作最大的可能索引。
從左向右執行查詢。否則,該方法與 lastIndexOf 相同。
功能部分程式碼:
2.MySQL的substring_index()函式和CONCAT()函式//轉成小寫 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); }
substring_index(“待擷取有用部分的字串”,“擷取資料依據的字元”,擷取到字元的位置)
CONCAT(str1,str2,…)
返回結果為連線引數產生的字串。如有任何一個引數為NULL ,則返回值為 NULL。
功能部分程式碼:(mapper.xml)
3.mybatis批量更新不同的欄位<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>
本文用的方法:原生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中。
好的,今天這個核銷功能的就總結到這裡,希望裡面有的的東西能幫到你。
及時總結及時鞏固,希望有一天不用加班填坑