日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MyBatis foreach 批量更新實例

瀏覽:33日期:2023-10-20 10:35:12

在做配置選項(設備類型,所屬樓層等)的時候,當刪除某配置的時候,我需要檢驗該配置是否已被刪除。

@Override public BaseVO deleteOptionDetail(Integer id) { // 合法性驗證 if (null == id) { return ParamErrorVO.getInstance(); } ConfigOptionDetail configOptionDetail = configOptionDetailMapper.selectById(id); if (null == configOptionDetail || 1 == configOptionDetail.getIsDeleted()) { return new ErrorVO('該配置不存在'); } if (configOptionDetail.getSystem() == 1) { return new ErrorVO('系統屬性不能刪除'); } if (configOptionDetail.getUseCount() = 0) { return new ErrorVO('配置正在使用不能刪除,請先刪除使用配置的地方'); } // 合法性通過 configOptionDetail.setIsDeleted(1); configOptionDetail.setGmtModefied(Calendar.getInstance().getTime()); configOptionDetailMapper.updateById(configOptionDetail); // 更新內存配置 ConfigOptionConstruct.updateOption(); return SuccessVO.getInstance(); }

思考之后我決定采用,給配置選項設備一個use_count字段,代表該配置被引用的次數。 只有當該字段值為 0 時,該配置選項記錄才可被刪除。

MyBatis foreach 批量更新實例

使用情況:

我需要批量刪除房間, 刪除房間的同時,room對象中使用到了所屬樓層的配置選項,我需要將他們的引用減少

@Override public BaseVO deleteRoomByIds(Integer[] ids) { if (null == ids) { return ParamErrorVO.getInstance(); } EntityWrapper<Room> entityWrapper = new EntityWrapper<>(); entityWrapper.where('isdelete={0}', 0); // 核查刪除的房間中是否存在正在使用的設備 List<Integer> notDelete = deviceInfoService.checkRoomIds(ids); if (null != notDelete && 0 != notDelete.size()) { // 存在仍在使用設備的房間 entityWrapper.in('id', notDelete); // 查詢這些房間 List<Room> roomList = roomMapper.selectList(entityWrapper); // 獲取房間的名稱 StringBuilder stringBuilder = new StringBuilder(roomList.stream().map(Room::getName).collect(Collectors.toList()).toString()); System.out.println(stringBuilder); // TODO: 2018/4/8 可能需要修改提示語 return new ErrorVO(stringBuilder + ' 房間存在未刪除的設備,請先刪除設備'); } // 房間沒有設備在使用 List<Integer> idList = new ArrayList<>(); idList.addAll(Arrays.asList(ids)); // 查詢需要刪除的房間 entityWrapper.in('id', idList); List<Room> roomList = roomMapper.selectList(entityWrapper); if (null == roomList || idList.size() != roomList.size()) { return new ErrorVO('存在錯誤的房間'); } // ******************************************************************************************** 重點 // 可以邏輯刪除 int count = roomMapper.logicDeleteByIds(idList); List<Long> optionIds = roomList.stream().map(room -> Long.parseLong(room.getRoomPosition())).collect(Collectors.toList()); Map<Long, Long> optionIdsMap = optionIds.stream().collect(Collectors.groupingBy(p -> p,Collectors.counting())); // 移除所屬樓層配置選項的使用 configOptionDetailService.removeUseCount(optionIdsMap); ConfigOptionConstruct.updateOption(); if (count == idList.size()) { return SuccessVO.getInstance(); } else { return new ErrorVO('部分刪除失敗'); } }

optionIds 是從roomList 房間集合中,通過stream, 所引用的配置選項id集合

上面我紅字標明他們,是因為,如果房間A 是一樓, 房間B 也是一樓, 那么我應該將一樓的引用減 2。

所以我將optionIds 分組轉成Map<配置選項id, 需要減少引用的次數>

最后一步,也是最重要的進行數據庫操作,我希望可以批量更新減少這些引用。

查看MyBatis文檔:

foreach

動態 SQL 的另外一個常用的操作需求是對一個集合進行遍歷,通常是在構建 IN 條件語句的時候。比如:

<select resultType='domain.blog.Post'> SELECT * FROM POST P WHERE ID in <foreach item='item' index='index' collection='list' open='(' separator=',' close=')'> #{item} </foreach></select>

foreach 元素的功能非常強大,它允許你指定一個集合,聲明可以在元素體內使用的集合項(item)和索引(index)變量。它也允許你指定開頭與結尾的字符串以及在迭代結果之間放置分隔符。這個元素是很智能的,因此它不會偶然地附加多余的分隔符。

注意 你可以將任何可迭代對象(如 List、Set 等)、Map 對象或者數組對象傳遞給 foreach 作為集合參數。當使用可迭代對象或者數組時,index 是當前迭代的次數,item 的值是本次迭代獲取的元素。當使用 Map 對象(或者 Map.Entry 對象的集合)時,index 是鍵,item 是值。

<update id='addUseCountByIds'> update config_option_detail set gmt_modified = #{gmtModified}, use_count = use_count + <foreach item='item' index='index' collection='list' open=' case id ' separator=' ' close=' end'> when #{index} then #{item} </foreach> where id in <foreach item='item' index='index' collection='list' open='(' separator=',' close=')'> #{index} </foreach></update>

補充:mybatis 用<foreach>根據ID批量更新時的一個注意點。

看接口。傳入一個Long型的List。

int updateReadCount(@Param(value = 'topicIdList') List<Long> topicIdList);

xml里面循環update.

<update parameterType='java.util.List'> update CTS set read_count = read_count + 1 where topic_id in <foreach item='item' index='index' collection='topicIdList' open='(' close=')' separator=','> #{item.topicId} </foreach> </update>

就是直接復制了別人的代碼,改了一改。怎么都跑不通。。。。。。。

問題就出在這個item,item 表示集合中每一個元素進行迭代時的別名。

List<Long> topicIdList 因為時Long型(不是entity封裝著的),就不需要別名了。改為如下就可以跑通了。

<update parameterType='java.util.List'> update CTS set read_count = read_count + 1 where topic_id in <foreach item='topicId' index='index' collection='topicIdList' open='(' close=')' separator=','> #{topicId} </foreach> </update>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Mybatis 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一区二区毛片| 日韩精品中文字幕一区二区| 久久亚洲色图| 免费一级片91| 一本一本久久| 欧美日韩一区自拍| 免费一级欧美片在线观看网站 | 另类亚洲自拍| 国产亚洲欧美日韩在线观看一区二区| 国产精品美女午夜爽爽| 欧美国产美女| 亚洲尤物在线| 精品美女视频 | 麻豆网站免费在线观看| 久久天堂成人| 欧美日韩一视频区二区| 午夜av成人| 综合欧美精品| 99精品视频在线观看免费播放| 性一交一乱一区二区洋洋av| 国产精品亲子伦av一区二区三区 | 亚洲青青久久| 亚洲一区资源| 日韩av一区二区在线影视| 国产成人黄色| 久久成人亚洲| 日韩不卡视频在线观看| 国产精品最新自拍| 亚洲专区一区| 色爱av综合网| 欧美激情三区| 日本麻豆一区二区三区视频| 999国产精品永久免费视频app| 国产日韩欧美一区在线| 在线视频精品| 精品1区2区3区4区| 日韩大片免费观看| 久久久久久亚洲精品美女| 日韩专区一卡二卡| 不卡av一区二区| 麻豆精品新av中文字幕| 亚洲精品成人一区| 日韩中文欧美在线| 视频一区中文字幕| 99亚洲视频| 亚洲欧美久久久| 亚洲作爱视频| 首页亚洲欧美制服丝腿| 久久亚洲视频| 视频在线观看国产精品| 欧美日韩精品免费观看视频完整| 日韩一区二区中文| 国产aa精品| 精品中文字幕一区二区三区四区| 日本a级不卡| 亚洲精品自拍| 日韩精品亚洲aⅴ在线影院| 另类av一区二区| 免费国产亚洲视频| 久久一二三区| 日韩中文av| 国产精品嫩模av在线| 欧美精品观看| 欧美国产极品| 久久久9色精品国产一区二区三区| 亚洲天堂免费电影| 伊人精品视频| 91精品一区| 你懂的国产精品| а√在线中文在线新版| 中文在线а√天堂| 国产模特精品视频久久久久| 视频一区二区不卡| 麻豆久久一区| 欧美二区视频| 久久国产婷婷国产香蕉| 麻豆成全视频免费观看在线看| 国产99久久| 亚洲精选av| 麻豆视频久久| 欧美理论视频| 久久国产精品免费一区二区三区| 另类小说一区二区三区| 久久黄色影院| 亚洲97av| 色婷婷亚洲mv天堂mv在影片| 亚洲一级黄色| 国产探花一区二区| 久久久成人网| 欧美日韩1区2区3区| 欧美日韩免费观看视频| 久久午夜精品一区二区| 国模大尺度视频一区二区| 亚洲欧美日韩国产一区| 久久av电影| 视频精品一区二区| 天堂中文在线播放| 综合激情在线| 欧美99久久| 欧美激情在线精品一区二区三区| 国产在线成人| 精品视频在线观看网站| 亚洲美洲欧洲综合国产一区| 久久三级中文| 欧美亚洲专区| 免费精品视频最新在线| 另类专区亚洲| 国产精品入口久久| 日韩激情网站| 美女网站久久| 亚州av乱码久久精品蜜桃| 国产一区二区三区四区五区传媒| 中文字幕免费精品| 亚洲自拍另类| 亚洲精品午夜av福利久久蜜桃| 国产精品一站二站| 亚洲精品一级| 日韩一区二区三区精品| 亚洲视频播放| 亚洲免费黄色| 尤物在线精品| 国产精品7m凸凹视频分类| 亚欧成人精品| 婷婷综合在线| 日韩精品91| 久久最新视频| 欧美在线91| 国产成人精品一区二区三区免费| 日韩不卡免费高清视频| 夜久久久久久| 亚洲精品无播放器在线播放| 欧美日韩国产一区二区在线观看| 久久精品伊人| 一本一道久久a久久精品蜜桃| 日本亚洲欧美天堂免费| www.51av欧美视频| 蜜桃视频一区二区三区在线观看| 视频二区不卡| 蜜桃久久久久久久| 成人国产精品久久| 免费在线观看不卡| 国产不卡人人| 日韩在线观看中文字幕| 免费看的黄色欧美网站| 国产精品美女午夜爽爽| 欧美日韩在线网站| 日韩欧美在线精品| 天堂网av成人| 国产精品羞羞答答在线观看| 视频福利一区| 国产女人18毛片水真多18精品| 久久激情婷婷| 国产精品手机在线播放| 免费观看不卡av| 麻豆国产欧美日韩综合精品二区| 国产午夜精品一区二区三区欧美| 国产精品入口久久| 天堂成人免费av电影一区| 欧美国产美女| 国产日韩欧美中文在线| 欧美日韩国产高清| 精品日韩一区| 日韩高清中文字幕一区| 久久国产小视频| 你懂的国产精品永久在线| 蜜臀va亚洲va欧美va天堂| 日韩免费视频| 国产欧美一区| 老鸭窝亚洲一区二区三区| 97国产成人高清在线观看| japanese国产精品| 人在线成免费视频| 毛片不卡一区二区| 日本a级不卡| 日韩精品一卡二卡三卡四卡无卡| 色偷偷色偷偷色偷偷在线视频| 快she精品国产999| 91久久视频| 国产99精品| 亚洲精品永久免费视频| 你懂的网址国产 欧美| 日本va欧美va欧美va精品| 快she精品国产999| 国产农村妇女精品一二区| 欧美理论视频| 国产99久久| 久久三级视频| 日韩欧美一区二区三区在线观看| 国产精品白丝久久av网站| 亚洲18在线| 日韩在线观看一区二区| 婷婷综合社区| 9色精品在线| 99riav1国产精品视频| 日韩视频二区| 亚洲一区二区三区四区五区午夜| 久久久精品网| 日本免费一区二区三区四区| 国产美女高潮在线| 伊伊综合在线|