在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>