在 Java + MyBatis 中,查询返回空(null、空 List、或字段为 null) 是很常见的问题,原因通常集中在以下几个方面。我按出现频率从高到低帮你梳理,并给出排查方法。
这是最直接的:
status = 1 但实际是 '1')✅ 排查方式:
-- 把 MyBatis 生成的 SQL 复制到数据库客户端执行
SELECT * FROM user WHERE id = 123;
常见错误:
<select id="getUser" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
但调用时:
getUser(null); // 或者参数名不匹配
✅ 排查:
logging:
level:
com.xxx.mapper: debug
User getUser(); // 查不到返回 null(正常)
List<User> list = getUser(); // 返回 [] 不是 null(正常)
✅ 注意:
null空集合,不是 null数据库:
user_name
Java:
private String username;
❌ 结果:对象不为 null,但字段全是 null
✅ 解决方案:
SELECT user_name AS username FROM user
mybatis:
configuration:
map-underscore-to-camel-case: true
错误示例:
<select id="getUser" resultType="java.lang.String">
但你需要的是 User
✅ 检查:
resultType 是否指向正确实体resultMap@Mapper@Mapper
public interface UserMapper {}
或:
@MapperScan("com.xxx.mapper")
如 MyBatis-Plus:
@TableLogic
private Integer deleted;
deleted = 1 的数据会自动被过滤
你可以按顺序排查:
你可以把下面信息发我,我可以直接帮你定位:
我可以精确到哪一行导致返回空。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。