Mybatis foreach 批量插入


   在mybatis中可以使用foreach標簽做批量插入和更新操作,以批量插入為例:

<insert id="insertMsg" parameterType="xz.hr.domain.ResumeMessage">INSERT INTO hr_resume_message (id,content,accept_user,create_by,create_date)
     VALUES
<foreach collection="ids" item="id" separator="," index="index"> (#{id} #{content}, #{id}, #{createBy}, sysdate) </foreach> </insert>

collection屬性填寫參數中對應的集合變量,我這里是實體中的ids屬性為一個集合。

需要注意的是,oracle數據的寫法不一樣,它不支持 insert tableName (id,name) values (xx,xx),(xx,xx)寫法,正確的姿勢如下:

1.需要取掉values

2.separator 要改為union all

3.foreach標簽中沒有括號

4.另外如果是使用序列寫法也要變,要把序列單獨拿出來,否則要報錯:

//不使用序列
<insert id="save" parameterType="UserRole">
  insert into sys_user_role
  (user_id, role_id)
  <foreach collection="roleIdList" item="item" index="index" separator="UNION ALL" >
    SELECT
    #{userId}, 
    #{item}
    FROM dual
  </foreach>
</insert>

 


//使用序列
<
insert id="insertMsg" parameterType="xz.hr.domain.ResumeMessage"> INSERT INTO hr_resume_message (id,content,accept_user,create_by,create_date) SELECT HR_PUB_SEQ.nextval,A.* from ( <foreach collection="ids" item="id" separator="UNION ALL" index="index"> SELECT #{content}, #{id}, #{createBy}, sysdate FROM DUAL </foreach> ) A </insert>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM