插入数据时,在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完成自定义序列做数据列