最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis使用雙層<foreach>循環(huán)嵌套方式

 更新時間:2024年09月24日 09:57:06   作者:星狗、  
在Mybatis中使用雙層循環(huán)嵌套插入數(shù)據(jù)可以有效減少數(shù)據(jù)庫IO操作,提高性能,通過在mapper.xml中定義雙層集合來實現(xiàn),外層集合為實體類中的集合字段,內(nèi)層集合為集合字段中的另一個集合,通過這種方式,可以在業(yè)務(wù)代碼中減少循環(huán)插入的次數(shù)

mybatis使用雙層<foreach>循環(huán)嵌套

有個需求,要用到mybatis的雙層循環(huán)嵌套插入數(shù)據(jù),當(dāng)然,可以使用單層,在業(yè)務(wù)代碼層面循環(huán)插入,那樣會多出很多次IO數(shù)據(jù)庫,如果并發(fā)量高了,性能將會很低;

所以,這里我們在mybatis層面使用雙層循環(huán)嵌套來減少數(shù)據(jù)庫IO帶來的性能消耗問題。

mapper接口

void updateSchDataByShiftAuto(UpdateSchDataByShiftParam param);

mapper.xml

<update id="updateSchDataByShiftAuto" parameterType="net.crisps.hr.time.param.UpdateSchDataByShiftParam">

        <foreach collection="schRuleIdParams" item="item" separator=";">
            update ${tableName} set `shift_id` = #{item.newSchRuleId},
            `shift_flag` = #{shiftFlag},`hours` = #{hours},`late_cal` = #                     {lateCal},`leave_early_cal` = #{leaveEarlyCal},
            `abs_cal_late` = #{absCalLate},`abs_cal_leave_early` = #{absCalLeaveEarly},`go_time_one` = #{goTimeOne},
            `go_time_one_start_time` = #{goTimeOneStartTime},`go_time_one_end_time` = #{goTimeOneEndTime},
            `go_time_one_status` = #{goTimeOneStatus},`off_time_one` = #{offTimeOne},`off_time_one_start_time` = #{offTimeOneStartTime},
            `off_time_one_end_time` = #{offTimeOneEndTime},`off_time_one_status` = #{offTimeOneStatus},`go_time_two` = #{goTimeTwo},
            `go_time_two_start_time` = #{goTimeTwoStartTime},`go_time_two_end_time` = #{goTimeTwoEndTime},`go_time_two_status` = #{goTimeTwoStatus},
            `off_time_two` = #{offTimeTwo},`off_time_two_start_time` = #{offTimeTwoStartTime},creater_id = #{createId},creater_name = #{createName},create_time = #{nowTime},
            `off_time_two_end_time` = #{offTimeTwoEndTime},`off_time_two_status` = #{offTimeTwoStatus},`end_time_status` = #{endTimeStatus}
            where
            `shift_id` = #{item.oldSchRuleId}
            <if test="item.dates != null and item.dates.size() >0 ">
                and `sch_date` in
                <foreach collection="item.dates" item="flag" separator="," open="(" close=")">
                    #{flag}
                </foreach>
            </if>
        </foreach>

</update>

入?yún)嶓w類

@Data
public class UpdateSchDataByShiftParam {

    /**
     * mybatis循環(huán)條件集合
     */
    private List<SchRuleIdParam> schRuleIdParams;

    /**
     * 表名
     */
    private String tableName;

    /**
     * 班次ID
     */
    private Long shiftId;

    /**
     * 上班時段:1一天一次上下班,2一天二次上下班
     */
    private Integer shiftFlag;

    /**
     * 工作時長
     */
    private String hours;
    /**
     * 遲到計算:遲到幾分鐘算遲到,默認(rèn)為 1
     */
    private Integer lateCal;
    /**
     * 早退計算:早退幾分鐘算早退,默認(rèn)為 1
     */
    private Integer leaveEarlyCal;
    /**
     * 曠工計算:遲到幾分鐘算曠工,默認(rèn)為121
     */
    private Integer absCalLate;
    /**
     * 曠工計算:早退幾分鐘算曠工,默認(rèn)為121
     */
    private Integer absCalLeaveEarly;

    /**
     * 上班1:上班時間
     */
    private String goTimeOne;
    /**
     * 上班1:上班時間 有效打卡范圍開始時間
     */
    private String goTimeOneStartTime;
    /**
     * 上班1:上班時間 有效打卡范圍結(jié)束時間
     */
    private String goTimeOneEndTime;
    /**
     * 上班1:上班時間 是否必須打卡:0必須打卡,1不是必須打卡
     */
    private Integer goTimeOneStatus;
    /**
     * 下班1:下班時間
     */
    private String offTimeOne;
    /**
     * 下班1:下班時間 有效打卡范圍開始時間
     */
    private String offTimeOneStartTime;
    /**
     * 下班1:下班時間 有效打卡范圍結(jié)束時間
     */
    private String offTimeOneEndTime;
    /**
     * 下班1:下班時間 是否必須打卡:0必須打卡,1不是必須打卡
     */
    private Integer offTimeOneStatus;
    /**
     * 上班2:上班時間
     */
    private String goTimeTwo;
    /**
     * 上班2:上班時間 有效打卡范圍開始時間
     */
    private String goTimeTwoStartTime;
    /**
     * 上班2:上班時間 有效打卡范圍結(jié)束時間
     */
    private String goTimeTwoEndTime;
    /**
     * 上班2:上班時間 是否必須打卡:0必須打卡,1不是必須打卡
     */
    private Integer goTimeTwoStatus;
    /**
     * 下班2:下班時間
     */
    private String offTimeTwo;
    /**
     * 下班2:下班時間 有效打卡范圍開始時間
     */
    private String offTimeTwoStartTime;
    /**
     * 下班2:下班時間 有效打卡范圍結(jié)束時間
     */
    private String offTimeTwoEndTime;
    /**
     * 下班2:下班時間 是否必須打卡:0必須打卡,1不是必須打卡
     */
    private Integer offTimeTwoStatus;
    /**
     * 有效打卡范圍結(jié)束時間是否是第二日:0否,1是
     */
    private Integer endTimeStatus;
    /**
     * 當(dāng)前日期
     */
    private String nowTime;
    /**
     * 創(chuàng)建人ID
     */
    private Long createId;
    /**
     * 創(chuàng)建人姓名
     */
    private String createName;


}

這里說明一下,實體類中有基本字段屬性,還有集合字段屬性。

循環(huán)時用實體類中的集合字段當(dāng)最外層循環(huán)體,實體類的集合里面的實體還有一個層集合,這樣mapper.xml里面就有雙層集合。

實體類映射時,mybatis會自動映射SQL字段,只要實體類的基本字段與循環(huán)體里面的字段不相同,就可以在循環(huán)體里面也映射實體類的基本字段。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot集合前端實現(xiàn)進(jìn)度條顯示功能實例

    Springboot集合前端實現(xiàn)進(jìn)度條顯示功能實例

    這篇文章主要介紹了使用進(jìn)度條提升用戶體驗的原因,特別是在處理大文件上傳、下載或長時間運行的操作時,進(jìn)度條通過實時反饋任務(wù)進(jìn)度,減少用戶的不確定感,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-11-11
  • Spring Boot 整合第三方組件Redis、MyBatis、Kafka 實戰(zhàn)案例指南

    Spring Boot 整合第三方組件Redis、MyBatis、Kafka 實戰(zhàn)案例指南

    Spring Boot通過Starter機制和自動裝配簡化了第三方組件整合,本文以Redis為例,展示了Spring Boot的整合優(yōu)勢,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • mybatis插件實現(xiàn)自定義改寫表名實例代碼

    mybatis插件實現(xiàn)自定義改寫表名實例代碼

    在數(shù)據(jù)庫操作過程中,經(jīng)常有修改表名的需求,下面這篇文章主要給大家介紹了關(guān)于mybatis插件實現(xiàn)自定義改寫表名的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • SpringBoot+Vue+JWT的前后端分離登錄認(rèn)證詳細(xì)步驟

    SpringBoot+Vue+JWT的前后端分離登錄認(rèn)證詳細(xì)步驟

    這篇文章主要介紹了SpringBoot+Vue+JWT的前后端分離登錄認(rèn)證,其實創(chuàng)建后端springboot工程也很簡單,本文安裝idea步驟一步步給大家詳細(xì)介紹,需要的朋友可以參考下
    2021-09-09
  • Java 自定義Spring框架與Spring IoC相關(guān)接口分析

    Java 自定義Spring框架與Spring IoC相關(guān)接口分析

    Spring框架是由于軟件開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開發(fā)
    2021-10-10
  • Java并發(fā)編程之常用的多線程實現(xiàn)方式分析

    Java并發(fā)編程之常用的多線程實現(xiàn)方式分析

    這篇文章主要介紹了Java并發(fā)編程之常用的多線程實現(xiàn)方式,結(jié)合實例形式分析了java并發(fā)編程中多線程的相關(guān)原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-02-02
  • Java線程的6種狀態(tài)及切換教程

    Java線程的6種狀態(tài)及切換教程

    這篇文章主要給大家介紹了關(guān)于Java線程的6種狀態(tài)及切換教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java調(diào)用微信現(xiàn)金紅包接口的心得與體會總結(jié)

    java調(diào)用微信現(xiàn)金紅包接口的心得與體會總結(jié)

    這篇文章主要介紹了java調(diào)用微信現(xiàn)金紅包接口的心得與體會總結(jié),有需要的朋友可以了解一下。
    2016-11-11
  • Java中使用MongoDB數(shù)據(jù)庫實例Demo

    Java中使用MongoDB數(shù)據(jù)庫實例Demo

    MongoDB是由C++語言編寫的,基于分布式文件存儲的數(shù)據(jù)庫,是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是最接近于關(guān)系型數(shù)據(jù)庫的NoSQL數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于Java中使用MongoDB數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Spring FTP上傳下載工具類遇到問題小結(jié)

    Spring FTP上傳下載工具類遇到問題小結(jié)

    本文通過實例代碼給大家介紹了Spring FTP上傳下載工具類遇到問題小結(jié),非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-12-12

最新評論

榆林市| 安阳市| 迁西县| 堆龙德庆县| 济阳县| 水富县| 灵寿县| 隆化县| 辽中县| 新晃| 三河市| 舞阳县| 古田县| 辽阳市| 彭山县| 分宜县| 会昌县| 霍林郭勒市| 巴彦县| 科技| 西充县| 漳州市| 河东区| 陈巴尔虎旗| 台南市| 莆田市| 阿拉善盟| 神木县| 新安县| 视频| 江陵县| 邵阳县| 永吉县| 西盟| 晋州市| 黑山县| 太湖县| 汝州市| 东阿县| 顺昌县| 杭锦后旗|