赞
踩
import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.SelectKey; public interface KeyAnnoMapper { /* * statement="select last_insert_id()":表示定义的子查询语句 * before=false:表示在插入之前执行,由于是自增主键,所以为false * keyColumn="id":插入数据以后,要返回的内容在数据表中对应的字段名称 * resultType=long.class:表示返回值得类型 * keyProperty="id":指定返回的id映射到bean中的哪个属性,这里类属性也叫id */ //使用注解 @Insert("insert into order_info(user_id, goods_id, goods_name, goods_count, goods_price, order_channel, status, create_date) values(#{userId}, #{goodsId}, #{goodsName}, #{goodsCount}, #{goodsPrice}, #{orderChannel},#{status},#{createDate} )") @SelectKey(keyColumn="id", keyProperty="id", resultType=long.class, before=false, statement="select last_insert_id()") public long insert(OrderInfo orderInfo); }
<insert id="insert" parameterType="OrderInfo">
insert into order_info(user_id, goods_id, goods_name, goods_count, goods_price, order_channel, status, create_date)
values(#{userId}, #{goodsId}, #{goodsName}, #{goodsCount}, #{goodsPrice}, #{orderChannel},#{status},#{createDate} ))
<selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="long">
select last_insert_id()
</selectKey>
</insert>
语义等同于注解类型
为什么执行这个sql后,一直返回1?因为返回的值是受影响行数,而不是id,id被注入到bean里
应该这么获取
long result = orderDao.insert(orderInfo);
long orderId = orderInfo.getId();
我插入数据时插入的是一个bean,这个bean的类型就是上面我们提到的parameterType的值,插入前它的id是空。
当我们执行插入后,返回插入的结果result,插入成功result=1,插入失败result=0,这就是为什么结果一直为1了,因为返回的结果根本不是我们需要的id,返回的id其实已经映射到了我们插入的bean中,我们只要通过它的get方法就可以得到了:orderInfo.getId();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。