iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post)。
oracle设置
<!-- Oracle SEQUENCE --> <insert id="insert" parameterClass="Personal"> <selectKey keyProperty="id" resultClass="java.math.BigDecimal" type="pre"> <![CDATA[ SELECT PERSONAL_SEQ.NEXTVAL FROM dual <!--该行内容必须在oracle数据库中创建序列方可使用--> ]]> </selectKey> <![CDATA[ insert into PERSONAL(ID,NAME,SEX,BIRTHDAY)values(#id#, #name#,#sex#,#birthday#) ]]> </insert>
sqlServer设置
<!-- Microsoft SQL Server IDENTITY Column 改进-->
<insert id="insert" parameterClass="Personal">
<selectKey resultClass="java.math.BigDecimal" keyProperty="id">
<![CDATA[insert into PERSONAL (name,sex,birthday) values(#name#,#sex#,#birthday#)
SELECT SCOPE_IDENTITY() AS ID ]]>
</selectKey>
</insert>
mySql设置
<!-- MySQL Last Insert Id -->
<insert id="insert" parameterClass="Personal">
<![CDATA[insert into Personal(name,sex,birthday) values(#name#,#sex#,#birthday#)]]>
<selectKey resultClass="java.math.BigDecimal" keyProperty="id">
<![CDATA[SELECT LAST_INSERT_ID() AS ID ]]>
<!-- 该方法LAST_INSERT_ID()与数据库连接绑定,同属统一会话级别,不会发生上述MS SQL Server的函数问题。 -->
</selectKey>
</insert> 转自:http://xiaoliang.556688.blog.163.com/blog/static/1145561892012102043254586/