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

MyBatis中的循環(huán)插入insert foreach問(wèn)題

 更新時(shí)間:2023年11月04日 10:24:46   作者:攻城獅Chova  
這篇文章主要介紹了MyBatis中的循環(huán)插入insert foreach問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MyBatis循環(huán)插入insert foreach

分析問(wèn)題

在后端數(shù)據(jù)需要的循環(huán)插入數(shù)據(jù)庫(kù)中時(shí),不要在實(shí)現(xiàn)類(lèi)ServiceImpl中使用foreach語(yǔ)句

這樣會(huì)導(dǎo)致每次插入一條數(shù)據(jù)就會(huì)查詢一次數(shù)據(jù)庫(kù),導(dǎo)致性能極低

解決方法

在MyBatis中的Mapper.xml使用insert foreach實(shí)現(xiàn)數(shù)據(jù)的循環(huán)插入

這樣就可以查詢一次數(shù)據(jù)庫(kù),將所有數(shù)據(jù)循環(huán)插入

	<insert id="saveList">
        insert into
        table (
        id ,
        column
        )values
        <foreach collection="list" item="item" index="index" separator="," >
            (
            #{item.id},
            #{item.column}
            )
        </foreach>
    </insert>

心得:

研究MyBatis框架,熟悉相關(guān)便捷開(kāi)發(fā)的語(yǔ)法以及操作

MyBatis批量添加(foreach標(biāo)簽)

delete from  xxx_table where id  in 
<foreach collection="list" item="item" index="index" open="(" separator="," close=")"> 
		#{item}
</foreach>  => (1,2,3,4)

foreach標(biāo)簽:主要應(yīng)用于批量刪除與批量插入操作。

foreach標(biāo)簽包含的的常用屬性有collection,item,index,open,separator,close

  • collection:表示迭代集合的名稱(chēng),自定義名稱(chēng),可以使用@Param注解指定
  • 只有一個(gè)List/Array/Map類(lèi)型參數(shù)時(shí),如果不加@Param注解,collection分別必須填:list、array、map中的key屬性
  • 有多個(gè)參數(shù)時(shí),不加@Param注解,collection和默認(rèn)參數(shù)名稱(chēng)一致
  • 如果加@Param注解,都和注解定義一致
  • item:表示本次迭代獲取的元素,自定義名稱(chēng);表示本次迭代獲取的元素,若collection為L(zhǎng)ist、Set或者數(shù)組,則表示其中的元素;若collection為map,則代表key-value的value,該參數(shù)為必選
  • separator:分隔符,mybatis會(huì)在每次迭代后給sql語(yǔ)句append上separator屬性指定的字符,該參數(shù)為可選項(xiàng)
  • open:表示該語(yǔ)句以什么開(kāi)始,最常用的是左括弧’(’,注意:mybatis會(huì)將該字符拼接到整體的sql語(yǔ)句之前,并且只拼接一次,該參數(shù)為可選項(xiàng)
  • close:表示該語(yǔ)句以什么開(kāi)始,最常用的是左括弧’(’,注意:mybatis會(huì)將該字符拼接到整體的sql語(yǔ)句之前,并且只拼接一次,該參數(shù)為可選項(xiàng)
  • index:在list、Set和數(shù)組中,index表示當(dāng)前迭代的位置,在map中,index代指是元素的key,該參數(shù)是可選項(xiàng)。

在使用foreach的時(shí)候最關(guān)鍵的也是最容易出錯(cuò)的就是collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,主要有一下3種情況

1.如果傳入的是單參數(shù)且參數(shù)類(lèi)型是一個(gè)List的時(shí)候,collection屬性值為list

2.如果傳入的是單參數(shù)且參數(shù)類(lèi)型是一個(gè)array數(shù)組的時(shí)候,collection的屬性值為array

3.如果傳入的參數(shù)是多個(gè)的時(shí)候,我們就需要把它們封裝成一個(gè)Map了,當(dāng)然單參數(shù)也可以封裝成map,實(shí)際上如果你在傳入?yún)?shù)的時(shí)候,在MyBatis里面也是會(huì)把它封裝成一個(gè)Map的,map的key就是參數(shù)名,所以這個(gè)時(shí)候collection屬性值就是傳入的List或array對(duì)象在自己封裝的map里面的key。

使用示例

對(duì)于前兩種情況的使用非常簡(jiǎn)單易懂,這里我們對(duì)第三種情況進(jìn)行簡(jiǎn)單的使用,來(lái)進(jìn)行一個(gè)批量插入。

controller層

        LocalDateTime localDateTime = LocalDateTime.now();
        teacherCourseList.setCreate_time(localDateTime);
        teacherCourseList.setUpdate_time(localDateTime);
        log.info("入?yún)?======"+teacherCourseList);
 
        Map<String,Object> map=new HashMap<>();
        map.put("username",teacherCourseList.getUsername());
        map.put("CourseList",teacherCourseList.getCourseList());
        map.put("create_time",teacherCourseList.getCreate_time());
        map.put("update_time",teacherCourseList.getUpdate_time());
        courseService.batchInsert(map);

xml

<insert id="batchInsert">
    insert into ref_teacher_course (teacher_id,course_id,create_time,update_time)
    values 
    <foreach collection="teacherCourseList.CourseList" item="item" index="index" separator=",">
        (#{teacherCourseList.username},
        #{item},
        #{teacherCourseList.create_time},
        #{teacherCourseList.update_time})
    </foreach>
</insert>

mapper

void batchInsert(@Param("teacherCourseList") Map map);

總結(jié)

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

相關(guān)文章

  • 多線程(多窗口賣(mài)票實(shí)例講解)

    多線程(多窗口賣(mài)票實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇多線程(多窗口賣(mài)票實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 淺談Java StringBuilder為什么線程不安全

    淺談Java StringBuilder為什么線程不安全

    這篇文章主要介紹了淺談Java StringBuilder為什么線程不安全,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • JavaWeb組件Servlet使用實(shí)例解析

    JavaWeb組件Servlet使用實(shí)例解析

    這篇文章主要介紹了JavaWeb組件Servlet使用實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 避免多個(gè)jar通過(guò)maven打包導(dǎo)致同名配置文件覆蓋沖突問(wèn)題

    避免多個(gè)jar通過(guò)maven打包導(dǎo)致同名配置文件覆蓋沖突問(wèn)題

    這篇文章主要介紹了避免多個(gè)jar通過(guò)maven打包導(dǎo)致同名配置文件覆蓋沖突問(wèn)題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • SQL注入攻擊及其在SpringBoot中使用MyBatisPlus的防范策略的方法

    SQL注入攻擊及其在SpringBoot中使用MyBatisPlus的防范策略的方法

    本文介紹了如何使用SpringBoot整合JavaDeeplearning4j構(gòu)建一個(gè)文本摘要生成系統(tǒng),該系統(tǒng)能夠自動(dòng)從長(zhǎng)篇文本中提取關(guān)鍵信息,生成簡(jiǎn)潔的摘要,幫助用戶快速了解文本的主要內(nèi)容,系統(tǒng)使用LSTM神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,并通過(guò)SpringBoot創(chuàng)建RESTful?API進(jìn)行調(diào)用
    2024-11-11
  • Java SSL證書(shū)錯(cuò)誤:No subject alternative names present的解決方案

    Java SSL證書(shū)錯(cuò)誤:No subject alternative name

    本文深入解析Java SSL證書(shū)錯(cuò)誤'No subject alternative names present'的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • Java中的反射用法及說(shuō)明

    Java中的反射用法及說(shuō)明

    Java反射機(jī)制允許運(yùn)行時(shí)動(dòng)態(tài)獲取和操作類(lèi)的成員(屬性、方法、構(gòu)造器),通過(guò)Class對(duì)象實(shí)現(xiàn),廣泛應(yīng)用于框架開(kāi)發(fā)及動(dòng)態(tài)調(diào)用需求,支持繞過(guò)泛型限制、讀取配置文件等場(chǎng)景
    2025-07-07
  • SpringBoot啟動(dòng)流程SpringApplication準(zhǔn)備階段源碼分析

    SpringBoot啟動(dòng)流程SpringApplication準(zhǔn)備階段源碼分析

    這篇文章主要為大家介紹了SpringBoot啟動(dòng)流程SpringApplication準(zhǔn)備階段源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Spring源碼學(xué)習(xí)之動(dòng)態(tài)代理實(shí)現(xiàn)流程

    Spring源碼學(xué)習(xí)之動(dòng)態(tài)代理實(shí)現(xiàn)流程

    這篇文章主要給大家介紹了關(guān)于Spring源碼學(xué)習(xí)之動(dòng)態(tài)代理實(shí)現(xiàn)流程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 啟用springboot security后登錄web頁(yè)面需要用戶名和密碼的解決方法

    啟用springboot security后登錄web頁(yè)面需要用戶名和密碼的解決方法

    這篇文章主要介紹了啟用springboot security后登錄web頁(yè)面需要用戶名和密碼的解決方法,也就是使用默認(rèn)用戶和密碼登錄的操作方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02

最新評(píng)論

阿荣旗| 南昌市| 邵武市| 郎溪县| 文安县| 宜丰县| 西乡县| 海城市| 都昌县| 库尔勒市| 措美县| 苏尼特左旗| 临武县| 正安县| 盐源县| 仪陇县| 三亚市| 赤水市| 遂溪县| 连平县| 浦北县| 舞阳县| 宜兴市| 阿克| 油尖旺区| 固阳县| 澎湖县| 积石山| 濮阳县| 朝阳县| 伊吾县| 岐山县| 宜川县| 咸宁市| 巴林左旗| 宜兰市| 上饶市| 凌源市| 浏阳市| 大港区| 江安县|