优秀的编程知识分享平台

网站首页 > 技术文章 正文

Mybatis实现增量更新(存在就更新,不存在就新增)

nanyue 2024-07-31 12:02:07 技术文章 11 ℃

方法一

通过selectKey标签实现。主要作用是在插入数据之前或之后,查询主键的值。

selectKey的主要属性:

resultType:返回主键的类型
keyPropety:实体类对应主键的属性
order:如果是after,代表先插入,再执行selectKey中的sql。如果是before,则反之。

mapper.xml 示例:

<insert id="insertOrUpdate" parameterType="pd" >
        <selectKey keyProperty="count" resultType="int" order="BEFORE">
            select count(1) from table where ID= #{id}
        </selectKey>
        <if test="count > 0">
            update table set a=#{a} WHERE ID=#{id} 
        </if>
        <if test="count==0">
            insert into table (id,a) values (#{id},#{a})
        </if>
</insert>

方法二

利用数据库本身功能,MySQL中的”ON DUPLICATE KEY UPDATE“语法。

说明:INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。

mapper.xml示例:

<insert id="insertOrUpdate">
     insert into base_person
         (pname, idcard, gender, nation, source_flag, create_time)
     values
    <foreach collection="list" item="p" index="index" separator=",">
         (#{p.pname},
         #{p.idcard},
         #{p.gender},
         #{p.nation},
         #{p.sourceFlag},
         #{p.createTime})
     </foreach>
     ON DUPLICATE KEY UPDATE
         pname=values(pname),
         idcard=values(idcard),
         gender=values(gender),
         nation=values(nation)
</insert>



最近发表
标签列表