【问题标题】:mybatis batch insert generating duplicate uuid primary keymybatis批量插入生成重复uuid主键
【发布时间】:2018-03-29 03:56:07
【问题描述】:

当我插入单条记录时:

<insert id="add" parameterType="SysUser">
    <selectKey keyProperty="id" resultType="String" order="BEFORE">
        select replace(uuid(),'-','') from dual
    </selectKey>
    insert into sys_user(id,user_name,user_email,user_info,user_password,create_time)
    values
    (#{id,jdbcType=VARCHAR},
    #{userName,jdbcType=VARCHAR},
    #{userEmail,jdbcType=VARCHAR},
    #{userInfo,jdbcType=VARCHAR},
    #{userPassword,jdbcType=VARCHAR},
    #{createTime,jdbcType=TIMESTAMP})
</insert>

但是我想插入一个列表,如何像上面的单个插入一样生成uuid???

 <insert id="addSysUsers"  parameterType="List" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO sys_user(user_name,user_password,user_email)
        VALUES
        <foreach collection="sysUsers" item="sysUser" separator=",">
            (#{sysUser.userName,jdbcType=VARCHAR},#{sysUser.userPassword,jdbcType=VARCHAR},#{sysUser.userEmail,jdbcType=VARCHAR})
        </foreach>

    </insert>

【问题讨论】:

    标签: insert mybatis batch-insert


    【解决方案1】:

    最简单的方法是将 UUID 生成器放在值块中:

    <insert id="add" parameterType="SysUser">
        insert into sys_user(id,user_name,user_email,user_info,user_password,create_time)
        values
        (replace(uuid(),'-',''), <!-- create uuid directly here --->
        #{userName,jdbcType=VARCHAR},
        #{userEmail,jdbcType=VARCHAR},
        #{userInfo,jdbcType=VARCHAR},
        #{userPassword,jdbcType=VARCHAR},
        #{createTime,jdbcType=TIMESTAMP})
    </insert>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-05
      • 2014-06-22
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      相关资源
      最近更新 更多