Mybatis一对一中resultMap对两个表的id识别错误

标题说的有点拗口,在描述问题前先把我问题发生的背景说清楚

其实就是我在试Mybatis实现一对一关系时,创建两张表(user和orders),使用一对一的查找方式,输入订单id查询订单信息,嵌套用户顺便查询出订单所属的用户信息,结果使用resultMap显示。其中两张表的主键id都是一样的名称“id”

SQL语句  使用一对一的查找方式,输入订单id查询订单信息,嵌套用户顺便查询出订单所属的用户信息

 

问题描述


问题:但是在显示时,显示错误了,order信息没问题,嵌套查出的user部分信息错误了(user的id显示错误,与order的id一致,其他字段都显示为null,sex应该为2)但是关键的username是正确的,这就很诡异。

错误结果:User中的id=3,但是在数据库中这个User的id应该为1,同时sex应该为2

表中的数据

 

 

问题所在


其实通过显示可以看出,我查询的应该是正确,问题出在resultMap显示上,毕竟我查出的username是正确的。后来发现了问题所在:sql语句中混淆了l两张表的id,Mybatis分不清哪个是哪个
 

解决方法


两种,一种是修改数据库中id主键的名字,这样就不会混淆了。第二种就是查询的时候赋予两个表的主键不一样的别名。推荐第二种吧

修改sql语句

 SELECT
      o.id as order_id,
      user_id, number, createtime, note,
      u.id as user_id,
      username, birthday, sex, address
 FROM orders o, user u WHERE o.user_id = u.id and o.id=#{id}

修改resultMap映射中的内容,将id那一列的column都换成上面起的别名(如图,本来两个都是id的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值