标题说的有点拗口,在描述问题前先把我问题发生的背景说清楚
其实就是我在试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的)