在mybatis oracle多表插入的过程中,有时候我们需要oracle执行insert插入操作时返回主键自增长id,由于oracle的自增长需要sequence序列才能实现自增长,所以请先创建一个序列表,实现oracle数据库id的自增长,以下是oracle的sequence序列的创建方法:
http://tpyyes.com/a/mysql_oracle/2016/1116/26.html
创建完之后就可以通过下面的形式返回oracle的自增长主键id了,S_TBL_OA_APPROVAL_SET是序列表名称:
<insert id="insertSelectiveReturnId" parameterType="cn.com.xf.model.TblOaApprovalSet">
<selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="id">
SELECT S_TBL_OA_APPROVAL_SET.NEXTVAL as ID from DUAL
</selectKey>
insert into TBL_OA_APPROVAL_SET
<trim prefix="(" suffix=")" suffixOverrides=",">
ID,
<if test="deployId != null">
DEPLOY_ID,
</if>
<if test="companyId != null">
COMPANY_ID,
</if>
<if test="deptId != null">
DEPT_ID,
</if>
<if test="typeId != null">
TYPE_ID,
</if>
<if test="createDate != null">
CREATE_DATE,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{id},
<if test="deployId != null">
#{deployId,jdbcType=VARCHAR},
</if>
<if test="companyId != null">
#{companyId,jdbcType=DECIMAL},
</if>
<if test="deptId != null">
#{deptId,jdbcType=VARCHAR},
</if>
<if test="typeId != null">
#{typeId,jdbcType=DECIMAL},
</if>
<if test="createDate != null">
#{createDate,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>这个就是将序列返回赋值给了oracle的ID,然后通过keyProperty="id"传给了实体类id属性作为值,在values里面我们就可以用#{id}来获取值并插入到oracle数据库中,插入之后就会有id返回回来,我们通过“实体类.getId();”就可以获取返回的oracle主键自增长id了。