1.实体中CLOB中的字段为Sting
2.Mapper.xml中<resultMap>中 jdbcType 设置为 CLOB
3.批插使用 begin end;方式 这里面要注意:<foreach> 里面的separator的设置是";"而不是"union"或者"union all"
4.批插时根据某一字段判断存在即更新 截图截不全了下面贴上代码,有一下几点要注意:
(1)MERGE INTO 在<foreach>里面
(2)将begin end; 设置在<foreach> 里面
(3)#{item.releaseContent,jdbcType=CLOB} 用empty_clob() 代替
(4)要判断 releaseContent 非空,否则空值时会报错
<insert id="insertList" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="begin" close="end;">
MERGE INTO REPTILE R
USING (
SELECT
#{item.reptileIp,jdbcType=VARCHAR} AS REPTILE_IP,
#{item.reptileName,jdbcType=VARCHAR} AS REPTILE_NAME,
#{item.releaseDate,jdbcType=VARCHAR} AS RELEASE_DATE,
empty_clob() AS RELEASE_CONTENT,
#{item.createTime,jdbcType=TIMESTAMP} AS CREATE_TIME
FROM DUAL
) T ON ( R.REPTILE_IP= T.REPTILE_IP )
WHEN MATCHED THEN
update set
R.REPTILE_NAME = T.REPTILE_NAME,
R.RELEASE_DATE = T.RELEASE_DATE,
R.RELEASE_CONTENT = T.RELEASE_CONTENT,
R.CREATE_TIME = T.CREATE_TIME
WHEN NOT MATCHED THEN
insert (REPTILE_IP, REPTILE_NAME, RELEASE_DATE,RELEASE_CONTENT,CREATE_TIME)
values (T.REPTILE_IP,T.REPTILE_NAME,T.RELEASE_DATE,T.RELEASE_CONTENT,T.CREATE_TIME );
<if test="item.releaseContent != null">
update REPTILE set RELEASE_CONTENT = #{item.releaseContent} where REPTILE_IP = #{item.reptileIp};
</if>
</foreach>
</insert>
本博客参考于https://blog.csdn.net/a364901254/article/details/82314108