Mybatis查询记录数量与数据库直接查询不一致
起因
今天改bug,发现一个查询代码查出来的集合数只有一个,然后将其sql语句拿到数据库客户端查询,发现是多个
问题排查
通过一层一层的追溯,原来是Mybatis的xml映射不全导致的问题。xml内容类似与下面xml代码
<select id="findUserInfoListForMap" resultMap="BaseResultMap">
SELECT p.name, u.u_name,u.company,u.proComany,u.mobile,u.email, r.money
FROM user u
LEFT JOIN raiseentry r on r.userId=u.id
LEFT JOIN project p on r.sourceId=p.projectId...
</select> 经细心验证,BaseResultMap中的属性均有配全,但是该语句执行时返回的记录条数与直接在数据库中查询的不一致。
但是改成如下语句后,(多了个查询字段u.id)发现查询的结果正常了
<select id="findUserInfoListForMap" resultMap="BaseResultMap">
SELECT u.id, p.name, u.u_name,u.company,u.proComany,u.mobile,u.email, r.money
FROM user u
LEFT JOIN raiseentry r on r.userId=u.id
LEFT JOIN project p on r.sourceId=p.projectId...
</select>总结
- 可以使用select * from table 语句防止遗漏
- 以u.id,p.name,u.u_name这种形式一一匹配resultMap中的字段
- 用resultType属性自动映射自动将表中的字段与类中的属性进行关联映射(单表)
- 将需要的字段封装成DTO对象,在xml中使用resultType对应
Mybatis查询记录数量与数据库直接查询不一致
http://example.com/2024/07/29/Mybatis查询记录数量与数据库直接查询不一致/