在使用MyBatis做持久层时主键

Stephenmu 2011-12-19

在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数;如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能

针对Sequence主键而言,在执行insertsql前必须指定一个主键值给要插入的记录,如Oracle、DB2,可以采用如下配置方式:

<insertid="add"parameterType="vo.Category">

<selectKeyresultType="java.lang.Short"order="BEFORE"keyProperty="id">

SELECTSEQ_TEST.NEXTVALFROMDUAL

</selectKey>

insertintocategory(name_zh,parent_id,

show_order,delete_status,description

)

values(#{nameZh,jdbcType=VARCHAR},

#{parentId,jdbcType=SMALLINT},

#{showOrder,jdbcType=SMALLINT},

#{deleteStatus,jdbcType=BIT},

#{description,jdbcType=VARCHAR}

)

</insert>

针对自增主键的表,在插入时不需要主键,而是在插入过程自动获取一个自增的主键,比如MySQL,可以采用如下两种配置方式:

<insertid="add"parameterType="vo.Category"useGeneratedKeys="true"keyProperty="id">

insertintocategory(name_zh,parent_id,

show_order,delete_status,description

)

values(#{nameZh,jdbcType=VARCHAR},

#{parentId,jdbcType=SMALLINT},

#{showOrder,jdbcType=SMALLINT},

#{deleteStatus,jdbcType=BIT},

#{description,jdbcType=VARCHAR}

)

</insert>

<insertid="add"parameterType="vo.Category">

<selectKeyresultType="java.lang.Short"order="AFTER"keyProperty="id">

SELECTLAST_INSERT_ID()ASid

</selectKey>

insertintocategory(name_zh,parent_id,

show_order,delete_status,description

)

values(#{nameZh,jdbcType=VARCHAR},

#{parentId,jdbcType=SMALLINT},

#{showOrder,jdbcType=SMALLINT},

#{deleteStatus,jdbcType=BIT},

#{description,jdbcType=VARCHAR}

)

</insert>

在插入操作完成之后,参数category的id属性就已经被赋值了

相关推荐

兔子压倒窝边草 / 0评论 2013-07-26