您的位置:首页 > 数据库 > Oracle

MyBatis 3 自动生成 主键 针对不同的数据库(oracle/sqlserver/mysql)

2016-03-09 16:14 936 查看
MyBatis自动生成的主键很多数据库支持自动生成主键的数据类型。不过这通常(并不总是)是个私有的特性。SQL Map 通过<insert>的子元素<selectKey>来支持自动生成的键值。它同时支持预生成(如Oracle)和后生成两种类型(如 MS-SQL Server MySQL)。

一、Oracle设置

SEQ_COMMON为你自己创建的序列号


<insert id="saveUserInfo" parameterType="UserInfo">
<selectKey resultType="int"  keyProperty="userId" order="BEFORE">
<![CDATA[SELECT SEQ_COMMON.NEXTVAL AS ID FROM DUAL]]>
</selectKey>
<![CDATA[insert into userinfo(userId,userName,phone,age,birthday,remark)
values(#{userId},#{userName},#{phone},#{age},#{birthday},#{remark})]]>
</insert>


注意:

1、MyBatis3已使用resultType ,resultClass是会报错的!

2、order="BEFORE" 上,这个必须要写明,生成序列在之前。在ibatis中使用type="pro"
,但在MyBatis3中必须使用order否则报错!

3、selectKey中的 keyProperty 要和 insert into中的 插入的参数 要一致 keyProperty="userId"
如: insert into userinfo (userId)
VALUES (#{userId})

注意以上三点就OK了。

二、mysql设置

<insert id="saveUserInfo" parameterType="UserInfo"  useGeneratedKeys="true"   keyProperty="id">
insert into
userinfo(userName,phone,age,birthday,remark)
values(#{userName},#{phone},#{age},#{birthday},#{remark})
</insert>


mysql就简单了!

三、MS-SQL配置(本人没有测试过!)

<!-- Microsoft SQL Server IDENTITY Column 改进-->
<insertid="insertProduct-MS-SQL"parameterClass="com.domain.Product">
<selectKeyresultClass="int"keyProperty="id">
<![CDATA[insert into PRODUCT (PRD_DESCRIPTION) values(#description#)
SELECT SCOPE_IDENTITY() AS ID ]]>
</selectKey>
</insert>


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: