2019-08-01
說到批量刪除,就得先介紹一下mybatis 中 foreach collection的三種用法,這可以幫助我們快速實現批量處理數據的操作,不僅僅是批量刪除,當然在這里我只介紹批量刪除操作,其他情況下的操作原理相同。
mybatis 中 foreach collection的三種用法
foreach元素的屬性主要有 item,index,collection,open,separator,close。
1 item表示集合中每一個元素進行迭代時的別名,具體說明:在 list 和數組中是其中的對象,在 map 中是 value,該參數為必選。 2 index指 定一個名字,用於表示在迭代過程中,每次迭代到的位置,在 list 和數組中,index 是元素的序號;在 map 中,index 是元素的 key。 3 open表示該語句以什么開始, 4 separator表示在每次進行迭代之間以什么符號作為分隔符, 5 close表示以什么結束。
在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:
1 如果傳入的是單參數且參數類型是一個List的時候,collection屬性值為list集合類型 2 如果傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值為array數組類型 3 如果傳入的參數是多個的時候,我們就需要把它們封裝成一個Map了,當然單參數也可
注意:上述所說的參數的屬性值和相對應的mapper文件中的參數時一致的。
下面看看具體代碼示例:
單參數array數組類型:
mapper.xml層代碼:
1 <delete id="deleteRoster" parameterType="com.example.pojo.Roster"> 2 delete from roster where mobile in 3 <foreach collection="mobiles" index="index" item="mobile" 4 open="(" separator="," close=")"> 5 #{mobile} 6 </foreach> 7 </delete>
此處的collection中的屬性值和mapper.java中的傳入參數一致。
另外注意item中的屬性值可以和contorller接收到的參數名稱不一樣,在這里僅僅是一個別名,但是item中的屬性值要和#{}中的保持一致,切記。
index具體在這里的作用不是太重要,不過還是加上吧!
mapper層代碼:
1 void deleteRoster(String[] mobiles)
serviceImpl層代碼:
1 @Override 2 public void deleteRoster(String[] mobiles) { 3 rosterMapper.deleteRoster(mobiles); 4 }
Roster實體類代碼:
1 其他屬性值省略。 2 private String mobile; //手機號 3 private String[] mobiles; //根據手機號進行批量刪除的手機號數組 4 get,set省略。
controller層代碼:
1 @PostMapping("/roster/delete") 2 public Result<String> deleteRoster(@RequestBody Roster roster) { //Roster是一個實體類,其中包含需要要String[] mobiles 3 try { 4 rosterService.deleteRoster(roster.getMobiles(), roster.getCustomerId()); 5 return new Result<String>(OperateEnum.OPERATE_OK.getOperateStatus(), "刪除成功", null); 6 } catch (Exception e) { 7 return new Result<String>(OperateEnum.OPERATE_FAIL.getOperateStatus(), "操作失敗", null); 8 } 9 }
前台需要傳遞的數據類型及格式:(一定注意發送格式和接收解析的格式,否則會解析不出來)
1 發送請求數據類型格式: 2 {"mobiles":["157576651","15724367546",“15737756576”]} 3 發送請求內容編碼格類型:Content-type:application/json;Charset:UTF-8
4 請求方式:post請求
在這里知識介紹了單參數array數組類型的方式,不過單參數List集合類型的用法和數組類型相似,無非就是從前台傳過來的數據類型一個是
數組類型,一個是集合類型,根據自己的情況進行選擇;對於多參數的情況目前未使用過,后續使用會進行補充。
看了以上解答還有不懂得歡迎留言評論,會第一時間進行解答。感謝大家支持!