MyBatis 查出数据不一致 MyBatis返回数据和数据库查询不一致

— MyBatis查询到的数据 和 Sql 查询到的数据不一致

一、背景

近期工作中,遇到一个MyBatis查询数据不一致的问题,表现是: sql在数据库中查询出10条数据,mybatis 返回的9条 (小于数据库中查到的条数), 没有进行分页等操作,那么平白无故少了的数据取哪儿呢?

经常一番研究,问题出在 Mybatis的 标签映射问题上,下面将通过代码的形式,复现当时的问题。

二、问题复现

1、数据库中有3条数据,两条相互重复的

SELECT * FROM user_info

2、userInfoResultMap 正确写法

SELECT * FROM user_info

2.1、调用接口,返回结果是:

[{"userNo": 1,"name": "小明","age": 18,"user": null},{"userNo": 1,"name": "小明","age": 18,"user": null},{"userNo": 2,"name": "小红","age": 22,"user": null}]

3.1、userInfoResultMapNew 出现数据不一致,错误写法

SELECT * FROM user_info

3.2、问题是: Mybatis 查询sql Total 返回3条数据

3.3、实际接口返回2条数据

[{"userNo": 1,"name": "小明","age": 18,"user": null},{"userNo": 2,"name": "小红","age": 22,"user": null}]

三、总结

1、出现MyBatis返回数据比 实际sql查询返回的数据要少的情况,一般可能是 resultMap 标签配置错误,还有一种错误情况,可以参考这篇文章:https://thinkcode.blog.csdn.net/article/details/88095198

2、一对一的关联查询,可以不用 标签进行关联查询, 可以直接 对象名.属性 的方式进行配置,如: user.id ,可以避免出现 MyBatis返回数据比,sql查询返回的少。

SELECT * FROM user_info

2.2、一对一的关联查询,可以不用 标签进行关系维护,直接用 别名的形式也是可以的,如:b.id as `user.id`

SELECTa.user_no as userNo , a.age , a.name , b.id as`user.id` , b.age as `user.age` , b.name as `user.name`FROM user_info aLEFT JOIN `user` bon b.id = a.user_no

3、一对一的关联查询,别用 进行映射关系维护的,反正不是我用的。

MyBatis一对多关联查询XMl配置写法https://thinkcode.blog.csdn.net/article/details/88095198