今天開始用ibatis3在Oracle中做一個user表的插入:
<insert id="insertSelective" parameterType="cn.com.aabbcc.beans.InnerUser">
insert into SQ_ADMIN
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null">
NAME,
</if>
<if test="password != null">
PASSWORD,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{innerUserID,jdbcType=DECIMAL},
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
</trim>
</insert>
報告:不能將NULL插入到ID中。噢!原來我沒有寫select SQ_ADMIN_SEQ.nextval from dual
修改後就好了,注意紅色部分,order="BEFORE"在3.0中要加上的,然後ID不要去用<if test="innerUserID != null">去判斷,因為innerUserID永遠是null(不知道是不是BUG):
<insert id="insertSelective" parameterType="cn.com.aabbcc.beans.InnerUser">
<selectKey keyProperty="innerUserID" resultType="Long" order="BEFORE">
select SQ_ADMIN_SEQ.nextval from dual
</selectKey>
insert into SQ_ADMIN
<trim prefix="(" suffix=")" suffixOverrides=",">
ID,
<if test="name != null">
NAME,
</if>
<if test="password != null">
PASSWORD,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{innerUserID,jdbcType=DECIMAL},
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
</trim>
</insert>