常用的后台业务场景中经常会遇到批量插入mysql或者oracle数据库,但是这两个的写法却大有不同。直接上代码看看。
--------------------------------------------------------------------mysql----------------------------------------------------------------------------------------
<insert id="insertBatch" parameterType="java.util.List">
insert into table(cl1,cl2,cl3)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.cl1Vo,jdbcType=VARCHAR},
#{item.cl2Vo,jdbcType=VARCHAR},
#{item.cl3Vo,jdbcType=VARCHAR}
)
</foreach>
</insert>
注意,以上如果表中cl1是user_id,那么cl1Vo就是对应的你User.class中的字段private String userId,item.cl1Vo对应的就是userId。
再来看看批量插入到oracle该如何书写。
--------------------------------------------------------------------------oracle----------------------------------------------------------------------------------------
<insert id="insertBatch" parameterType="java.util.List" userGeneratedKeys="false">
INSERT ALL
<foreach collection="list" item="item" index="index">
INTO table(
cl1,
cl2,
cl3
)VALUES
(
#{item.cl1Vo,jdbcTyoe=VARCHAR},
#{item.cl2Vo,jdbcTyoe=VARCHAR},
#{item.cl3Vo,jdbcTyoe=VARCHAR}
)
</foreach>
SELECT 1 from DUAL
</insert>
在这里为大家提示两个容易犯错的jdbcType,如果User.class中有lang类型的字段,比如private Long userId,那么对应的xml文件中jdbcType=NUMERIC,如果User.class中有Date类型的字段,那么对应的xml文件中jdbcType=TIMESTAMP。