插入数据时,在xml中使用selectKey完成自定义序列做数据列

Posted 默辨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入数据时,在xml中使用selectKey完成自定义序列做数据列相关的知识,希望对你有一定的参考价值。

使用selectKey,在sql数据插入前,完成对应序列的赋值

针对数据库不同类型,可以添加相关判断,用于满足不通数据库之间的差异性

<mapper namespace="pers.mobian.SqlHelper.sequNextVal">
    <sql id="sequNextVal">
        <if test="'$dialect'=='oracle'">
            SELECT $dbSequName.NEXTVAL FROM DUAL
        </if>
        <if test="'$dialect'=='DB2'">
            SELECT nextval for $dbSequName FROM SYSIBM.SYSDUMMY1 
        </if>
        <if test="'$dialect'=='mysql'">
            <!-- 可以定位到指定方法中具体某个方法,用具体的方法实现序列的生成-->
            select  \\\\$@pers.mobian.util.DatabaseUtils@getSequenceNextId('$dbSequName')
        </if>
    </sql>
            
</mapper>



单条数据插入:

<insert id="addProductInfo">
    <selectKey keyProperty="link_id" order="BEFORE" resultType="java.lang.Long">
        <include refid="pers.mobian.SqlHelper.sequNextVal">
            <property name="dbSequName" value="PRODUCT_MOBIAN_SEQ"/>
        </include>
    </selectKey>
    
    INSERT INTO TTRD_MOBIAN
    ( link_id, parent_code, child_code ) 
    VALUES
    ( #link_id,jdbcType=DECIMAL, #parent_code,jdbcType=VARCHAR, #child_code,jdbcType=VARCHAR )
    
</insert>



批量数据插入:

mysql和oracle的批量插入语法有出入,请自行调整相关格式

<insert id="addLimitResultDetail"  parameterType="HashMap"  >
    insert into TTRD_MOBIAN (
        link_id,
        parent_code,
        child_code
    	)

    <foreach item="item" index="index" collection="items" separator=" union all " >
         select
         (<include refid="pers.mobian.SqlHelper.sequNextVal">
                <property name="dbSequName" value="PERS_MOBIAN_SEQ"/>
          </include> from dual),
        #parent_code,jdbcType=CHAR,
        #child_code,jdbcType=DECIMAL,

        from 
        dual
    </foreach>
</insert>

以上是关于插入数据时,在xml中使用selectKey完成自定义序列做数据列的主要内容,如果未能解决你的问题,请参考以下文章

插入数据时,在xml中使用selectKey完成自定义序列做数据列

selectKey在mybai中的使用

mybatis插入操作时,返回自增主键id

mybatis通过selectkey返回insert或update后的值

Mybatis批量插入返回自增主键(转)

Mybatis获取代理对象