今天开始用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>