Mybaits 联合主键查询结果与sql查询结果不同的问题
前言
在程序项目编写的过程中,我们不可避免的会用到sql多张表格的数据,或者用到一张具有联合主键的表格数据。
这时候,当我们在sql中使用正确语法查询时,可以得到我们想要的结果。但是当我们使用mybatis进行查询时,得到的结果有时候却不是我们想要的正确数据。
这里的主要问题,便是涉及到联合主键。
正文
如果select中的联合主键组合成的key不唯一(当只select部分联合主键时可能发生),那么就会把相同的key合并成一条数据。
例如KEY_A,KEY_B,KEY_C是联合主键
KEY_A | KEY_B | KEY_C | des |
---|---|---|---|
A1 | B1 | C1 | 数据1 |
A1 | B2 | C1 | 数据2 |
A1 | B2 | C2 | 数据3 |
如果只返回KEY_A,KEY_B,那么SQL查询结果是三条,但是MyBatis返回结果只有2条,数据3的key和数据2的key是一样的,所以不会返回数据3,MyBatis返回的结果为
KEY_A | KEY_B | KEY_C | des |
---|---|---|---|
A1 | B1 | C1 | 数据1 |
A1 | B2 | C1 | 数据2 |
(如果是单主键则没有问题)
附上我的数据库联合主键表的图(主键为p_username e_username e_positionid)
因为联合主键,所以mybaits查询的时候当规定只显示联合主键的某个(意思是并没有选择整个联合主键)且联合主键的某些列数据一致时,它不会显示重复的结果。
解决办法
首先把mybatis中的sql语句的主键写全,之后把 select标签的 resultOrdered属性设置为true
resultOrdered="true"
该属性描述为嵌套查询时使用,可将嵌套查询的所有嵌套结果列出
我的mybatis代码
本片文章参考:
https://blog.csdn.net/weixin_34033624/article/details/91949589