微服务中使用mybatis的insert操作时useGeneratedKeys=“true“ keyProperty=“id“返回自增主键遇到了坑

一,问题
  在使用springcloud搭建分布式服务之后,使用consumer调用provider来插入一条订单记录到数据库之后,想要同时获得该新增订单的主键值,便于接下来业务操作。刚开始想的很简单,直接用mybatis中useGeneratedKeys="true"  keyProperty="id"这两个属性就能完美实现。数据库显示插入数据成功,可是在consumer端死活获取不到自增的id值,调试了很久一直是null。
  二,原因
 后来才反应过来,传过来的订单类对象是传到了provider服务器上,也成功入参添加了数据,mybatis在该服务器上也返回了自增的主键给订单类。然而这个填充了主键的订单类对象一直是保留在了provider上面,并没有通过feign组件传到consumer客服端。分布式的话就是两个独立的系统,对象都是存在各自的运行环境中,是完全隔离的,这就成了互不相关的两个对象。所以consumer端一直拿不到主键id值。🙈🙈🙈
 三,解决方案
方案一: 可以在provider端的service层重新封装返回值为Map,里面存入订单类和数据库影响条数。
方案二:在consumer端利用生成的订单编号去数据库查新增的数据来获取新增的主键值
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值