最近在将ibatis框架改为Mybatis框架时,遇到mybatis框架无法按照原先的xml文件语句,将ibatis中的自增长列值进行返回的情况!
原ibatis代码
<insert id="insertSm" parameterType="className">
insert into classTable
(id,name,sex,address)
values(#id#,#name#,#sex#,#address#)
<selectKey resultType="long" keyProperty="Id">
SELECT @@IDENTITY AS id
</selectKey>
</insert>
原代码可以直接通过
long id = insert(getNameSpace()+ "insertSm",classValue);
获取自增长的id值。
但是,在mybatis中,insert返回的值只有插入的条数。
如何解决??????
1,一般是在在映射文件中加上keyProperty="key" useGeneratedKeys="true"
或2,
<insert id="insert" parameterType="User">
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
select last_insert_rowid() as id(或者select max(id))
</selectKey>
。。。。。
</insert>
或3,
因为mybatis中 配置的全局变量
<!-- 对于批量更新操作缓存SQL以提高性能 SIMPLE-->
<setting name="defaultExecutorType" value="SIMPLE" />
sqlserver 仅支持simple 不支持 batch 之前配置的是batch
或4,原语句不改变(大家可能有疑问:不是返不回来自增长的ID了么?下面会有解答!!!)
以上保证了返回了自增长的ID值。但是返回的自增长ID值不是id,而是在classValue中的ID对象中,可以通过geter方法获取
即,当insert执行完之后,原本作为参数传递的classValue对象中存在了ID值(classValue可以认为是插入之后的返回对象)