场景:当我们执行insert操作时,有时候希望获得刚刚插入的行的自增主键值
参考文献:
1.《spring+mybatis企业应用实战》第157页(主要)
2.http://blog.csdn.net/lklinkang/article/details/6185927
3.http://wenku.baidu.com/view/4c7d0d2605087632301212b7.html
实现方法:
1.设置:mapper的xml语句中要加入如下2个属性useGeneratedKeys="true" keyProperty="id";如下索所示。其中keyProperty中的值是执行insert时作为参数传入的对象的一个属性值,一般会设置为id,例如下面的是一个名为Order的对象,keyProperty里的“id”是Order对象的一个属性,这里也可以设置成其他的属性,mybatis是把获取的主键值,注意,是主键值,所以要注意自己设置的主键时什么,按需索取。
<insert id="insertOrder" parameterType="Order" useGeneratedKeys="true" keyProperty="id">
INSERT INTO shop_order
(total,creatTime,userId)
VALUES (#{total},#{creatTime},#{userId})
</insert>
Order对象如下,忽略了set和get方法
public class Order {
private int id;// 订单id
private double total;// 订单总金额
private Date creatTime;// 订单产生的时间
private int userId;// 用户id
}
2.获取
@Autowired
private OrderDao orderDao;
Order order = new Order();// 订单实体
order.setCreatTime(creatTime);// 往订单中放入订单时间
order.setTotal(total);// 往订单中放入订单总金额
order.setUserId(userId);// 往订单中放入订单用户的id
orderDao.insertOrder(order);// 向数据库插入订单
int oid = order.getId();// 获取主键id
上面代码中的3个set操作和获取主键id没有关系,这代码是我自己写的项目里摘录的。
解释:先new一个对象,这个对象将用我们的mybatis实现的orderDao执行insert,把order对象属性插入数据库,完成orderDao.insertOrder(order)这步后,mybatis会把刚刚插入数据库的这行数据的主键值放入到order对象的id属性中(第一步中讲了,可以设置成插入到其他属性),最终,oid即是我们要的主键值。
完毕!