MyBatis在Oracle中插入数据并返回主键的问题解决

来源:互联网 发布:js跨域post请求 编辑:程序博客网 时间:2024/06/03 04:49

引言:  在MyBatis中,希望在Oracle中插入数据之时,同时返回主键值

环境:MyBatis 3.2 , oracle, spring 3.2

mybatis 中的sql语句

<insert id="insertTest" parameterType="com.igool.rpc.db.model.thrift.SspTest">     <selectKey keyProperty="id" resultType="int" order="BEFORE">         select S_TEST.NEXTVAL from dual     </selectKey>     insert into ss_test(id,password) values(#{id}, #{password})</insert>

1)要点是这里使用了selectKey来定义返回新生成的PrimaryKey,这个情况仅仅适用于Oracle。

2)需要注意的地方是在Java代码中使用Integer类型,但是在MyBatis的映射文件中,使用java.math.BigDecimal类型,否则会报类型转换或者不匹配的错误。

3)还需要注意的是在mapper接口中不能使用@Param("")绑定传入实体参数这样会主键会绑定到新建的实体中。

其他比如MySQL或者SQLServer的情况适用于以下情况:

<insert id="insert" parameterType="Spares" useGeneratedKeys="true" keyProperty="id">            insert into ss_test(id,password) values(#{id}, #{password})</insert>


MySQL就一般比较稳定不会出现oracle出现的各种情况。
这是比较常用的返回主键的方法。


原创粉丝点击