欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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;
    /**
     * 遲到計算:遲到幾分鐘算遲到,默認為 1
     */
    private Integer lateCal;
    /**
     * 早退計算:早退幾分鐘算早退,默認為 1
     */
    private Integer leaveEarlyCal;
    /**
     * 曠工計算:遲到幾分鐘算曠工,默認為121
     */
    private Integer absCalLate;
    /**
     * 曠工計算:早退幾分鐘算曠工,默認為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中處理JSON日期格式方式

    SpringBoot中處理JSON日期格式方式

    SpringBoot中處理JSON日期格式主要有三種方式:使用@JsonFormat注解、配置默認格式以及自定義Jackson的ObjectMapper,每種方式都有其適用場景,可以根據(jù)具體需求選擇合適的方法
    2025-02-02
  • Spring的Bean容器介紹

    Spring的Bean容器介紹

    今天小編就為大家分享一篇關(guān)于Spring的Bean容器介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(詳解)

    基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(詳解)

    下面小編就為大家?guī)硪黄趕pring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Spring boot JPA實現(xiàn)分頁和枚舉轉(zhuǎn)換代碼示例

    Spring boot JPA實現(xiàn)分頁和枚舉轉(zhuǎn)換代碼示例

    這篇文章主要介紹了Spring boot JPA實現(xiàn)分頁和枚舉轉(zhuǎn)換代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Kotlin 和 Java 混合開發(fā)入門教程

    Kotlin 和 Java 混合開發(fā)入門教程

    這篇文章主要介紹了入門 Kotlin 和 Java 混合開發(fā),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java的Spring框架中AOP項目的一般配置和部署教程

    Java的Spring框架中AOP項目的一般配置和部署教程

    這篇文章主要介紹了Java的Spring框架中AOP項目的一般配置和部署教程,AOP面向方面編程的項目部署結(jié)構(gòu)都比較類似,因而也被看作是Spring的一種設(shè)計模式使用,需要的朋友可以參考下
    2016-04-04
  • Java連接并操作Sedna XML數(shù)據(jù)庫的方法

    Java連接并操作Sedna XML數(shù)據(jù)庫的方法

    這篇文章主要介紹了Java連接并操作Sedna XML數(shù)據(jù)庫的方法,較為詳細的說明了Sedna XML數(shù)據(jù)庫的原理與功能,并給出了基于java操作Sedna XML數(shù)據(jù)庫的方法,需要的朋友可以參考下
    2015-06-06
  • SpringBoot整合token實現(xiàn)登錄認證的示例代碼

    SpringBoot整合token實現(xiàn)登錄認證的示例代碼

    本文主要介紹了SpringBoot整合token實現(xiàn)登錄認證的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot 圖書管理系統(tǒng)(刪除、強制登錄、更新圖書)詳細代碼

    SpringBoot 圖書管理系統(tǒng)(刪除、強制登錄、更新圖書)詳細代碼

    在企業(yè)開發(fā)中,通常不采用delete語句進行物理刪除,而是使用邏輯刪除,邏輯刪除通過修改標識字段來表示數(shù)據(jù)已被刪除,方便數(shù)據(jù)恢復(fù),本文給大家介紹SpringBoot 圖書管理系統(tǒng)實例代碼,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • springboot使用logback文件查看錯誤日志過程詳解

    springboot使用logback文件查看錯誤日志過程詳解

    這篇文章主要介紹了springboot使用logback文件查看錯誤日志過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09

最新評論