亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

所以,這里我們?cè)趍ybatis層面使用雙層循環(huán)嵌套來(lái)減少數(shù)據(jù)庫(kù)IO帶來(lái)的性能消耗問(wèn)題。

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)?shí)體類

@Data
public class UpdateSchDataByShiftParam {

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

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

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

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

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

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


}

這里說(shuō)明一下,實(shí)體類中有基本字段屬性,還有集合字段屬性。

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

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

總結(jié)

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

相關(guān)文章

  • SpringBoot中處理JSON日期格式方式

    SpringBoot中處理JSON日期格式方式

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

    Spring的Bean容器介紹

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

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

    下面小編就為大家?guī)?lái)一篇基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Spring boot JPA實(shí)現(xiàn)分頁(yè)和枚舉轉(zhuǎn)換代碼示例

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

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

    Kotlin 和 Java 混合開(kāi)發(fā)入門(mén)教程

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

    Java的Spring框架中AOP項(xiàng)目的一般配置和部署教程

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

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

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

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

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

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

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

    springboot使用logback文件查看錯(cuò)誤日志過(guò)程詳解

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

最新評(píng)論