ibatis改Mybatis经验之返回自增长列值

最近在将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可以认为是插入之后的返回对象)



 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页