当记录不存在时insert/当记录存在时update

2022-04-09  本文已影响0人  _花

1.插入之前可以根据唯一字段判断是否数据库已经存在这条数据,如果有,则返回false,没有则返回true。

  <insert id="insertUser" parameterType="com.baidu.aduhdmap.permission.mbg.model.UserModel">
    insert into acl_user (id, user_name, email, memo, is_deleted, gmt_create, gmt_modified)
    select #{id,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR},#{memo,jdbcType=VARCHAR}, #{isDeleted,jdbcType=TINYINT},
            #{gmtCreate,jdbcType=TIMESTAMP}, #{gmtModified,jdbcType=TIMESTAMP}
    WHERE not exists (select * from acl_user
                      where email = #{email,jdbcType=VARCHAR});
  </insert>

我本地数据库版本是5.7.24运行上面的语句是OK的,但是在高版本运行会报错,高版本的话需要在where not exists ***前加 from dual

2.如果根据唯一字段email判断,数据库已有该数据,则什么都不操作直接返回true,如果没有该条数据,则插入数据库再返回true。

 <insert id="insertUser" parameterType="com.baidu.aduhdmap.permission.mbg.model.UserModel">
    insert into acl_user (id, user_name, email, memo, is_deleted, gmt_create, gmt_modified)
    values (#{id,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR},#{memo,jdbcType=VARCHAR}, #{isDeleted,jdbcType=TINYINT},
            #{gmtCreate,jdbcType=TIMESTAMP}, #{gmtModified,jdbcType=TIMESTAMP})
    ON DUPLICATE KEY UPDATE email=email;
  </insert>

3.如果根据唯一字段email判断,数据库已有该数据,则替换掉掉数据库现有数据,并返回true。

 <insert id="insertUser" parameterType="com.baidu.aduhdmap.permission.mbg.model.UserModel">
    insert into acl_user (id, user_name, email, memo, is_deleted, gmt_create, gmt_modified)
    values (#{id,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR},#{memo,jdbcType=VARCHAR}, #{isDeleted,jdbcType=TINYINT},
            #{gmtCreate,jdbcType=TIMESTAMP}, #{gmtModified,jdbcType=TIMESTAMP})
    ON DUPLICATE KEY UPDATE email=email;
  </insert>
上一篇 下一篇

猜你喜欢

热点阅读