mybatis批量插入生成重复uuid主键

mybatis batch insert generating duplicate uuid primary key

当我插入单条记录时:

<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>

最简单的方法是将 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>