1、正常情况下,我们在xml中写sql的时候,格式是这样的(以insert语句为例)
<!-- 新增实体 -->
<insert id="XXX" parameterClass="com.XX.XX.XXX">
insert into tableName (
key1,
key2,
key3,
key4)
values(
value1,
value2,
value3,
value4)
</insert>
那么问题来了,如果我们想通过触发序列的方式(例如在oracle环境下)获取id,并把获取到的id值赋给主键key1的值value1,我们应该怎么做呢?
解:
<!-- 新增实体 -->
<insert id="XXX" parameterClass="com.XX.XX.XXX">
<selectKey keyProperty="cid" resultClass="java.lang.Long"
type="pre">
select SEQ_XXX_ID.NEXTVAL from dual
</selectKey>
insert into tableName (
key1,
key2,
key3,
key4)
values(
#cid#,
value2,
value3,
value4)
</insert>
注:1、selectKey标签的type属性:
有些是预先生成(pre-generate)主键的,如Oracle和PostgreSQL;有些是事后生成(post-generate)主键的,如MySQL和SQL Server
2、本例仅仅是拿主键举个例子,实际上如果单纯为了使用序列创建id,有更简单的办法,直接把SEQ_XXX_ID.NEXTVAL
放在#cid#位置即可