温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java mybatis为何报空指针

发布时间:2026-09-23 07:27:34 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

在 Java + MyBatis 项目中,空指针异常(NullPointerException,NPE) 是非常常见的问题。下面按最常见原因 → 示例 → 解决方式给你系统梳理一下。


一、Mapper 接口为 null(最常见)

原因

  • Mapper 没有注入成功
  • 用了 new 创建 Mapper
  • Spring 扫描不到 Mapper

错误示例

UserMapper userMapper = new UserMapper(); // ❌
userMapper.selectById(1); // NPE

正确方式

@Autowired
private UserMapper userMapper;

检查点

  • 启动类是否有 @MapperScan("com.xxx.mapper")
  • Mapper 接口是否有 @Mapper
  • 是否是 Spring 管理的 Bean

二、查询结果本身为 null

原因

  • 数据库没有数据
  • SQL 条件写错
  • resultType / resultMap 不匹配

示例

User user = userMapper.selectById(999);
user.getName(); // ❌ NPE

解决

if (user != null) {
    user.getName();
}

或数据库保证存在:

SELECT ... WHERE id = #{id}

三、#{}/ ${} 参数为 null

原因

  • 传入参数为 null
  • 在 SQL 中直接调用方法

示例

userMapper.selectByName(null);
WHERE name = #{name}

一般不会 NPE,但:

WHERE name = #{user.name}  <!-- user 为 null 时 NPE -->

解决

<if test="user != null">
    AND name = #{user.name}
</if>

四、resultMap 映射失败导致对象为 null

原因

  • 字段名和属性名不一致
  • 没有开启驼峰
  • 构造函数问题

示例

public class User {
    private Integer userId;
}

数据库字段:user_id

解决

mybatis:
  configuration:
    map-underscore-to-camel-case: true

或:

<result column="user_id" property="userId"/>

五、动态 SQL 中 test 判断空指针

错误示例

<if test="status.equals('1')">  <!-- status 为 null → NPE -->

正确写法

<if test="status != null and status.equals('1')">

或:

<if test="'1'.equals(status)">

六、Service 层对象未初始化

private User user;

public void test() {
    user.getName(); // ❌
}

七、@Param 使用错误

错误

User select(@Param("id") Integer id);
WHERE id = #{userId}  <!-- 名称不一致 -->

八、MyBatis 返回 Map 但 key 不存在

Map<String, Object> map = userMapper.select();
map.get("age").toString(); // age 不存在 → NPE

快速排查清单 ✅

  1. Mapper 是否 @Autowired
  2. 是否 new Mapper
  3. SQL 是否查到数据
  4. 参数是否为 null
  5. resultMap 是否正确
  6. 动态 SQL 是否判空
  7. 数据库字段 vs Java 属性

如果你愿意,可以把报错堆栈 / Mapper 代码 / XML贴出来,我可以直接帮你定位是哪一行导致的 NPE。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手