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



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值