You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MyBatis中selectOne方法抛出NullPointerException问题求助

MyBatis selectOne 抛出 NullPointerException 的排查方案
  • 排查sqlSession是否为null
    你的DAO方法直接调用sqlSession.selectOne,如果sqlSession未正确初始化或注入,必然抛出NPE。可以在方法中添加调试代码确认:

    public int reviewTotalCnt() {
        System.out.println("========== Review Total Count DAO ==========");
        // 新增调试代码
        System.out.println("sqlSession is null? " + (sqlSession == null));
        return sqlSession.selectOne("ReviewMapper.reviewTotalCnt");
    }
    

    如果输出为true,需检查sqlSession的初始化逻辑:比如是否通过Spring容器正确注入,或是手动创建时SqlSessionFactory是否成功获取到数据库连接。

  • 核对Mapper的namespace与调用路径
    XML映射文件的根节点<mapper>必须设置正确的namespace,否则MyBatis无法匹配SQL语句。你的调用路径是ReviewMapper.reviewTotalCnt,XML中需对应:

    <mapper namespace="ReviewMapper">
        <!-- 你的select语句 -->
    </mapper>
    

    若namespace使用了全限定类名(如com.yourpackage.dao.ReviewMapper),则调用时必须写完整路径:sqlSession.selectOne("com.yourpackage.dao.ReviewMapper.reviewTotalCnt")。

  • 直接验证SQL语句有效性
    将XML中的SQL复制到数据库客户端执行:

    SELECT COUNT(r_id) FROM b_review;
    

    确认是否能正常返回数值(哪怕是0)。若SQL本身存在错误(如表名拼写错误、字段不存在),可能导致MyBatis返回异常或null,进而引发问题。

  • 确认映射文件已被MyBatis加载
    检查MyBatis配置文件(如mybatis-config.xml)或Spring配置,确保该ReviewMapper的XML文件已被添加到映射器列表:

    <!-- mybatis-config.xml 示例 -->
    <mappers>
        <mapper resource="path/to/your/ReviewMapper.xml"/>
    </mappers>
    

    若映射文件未被加载,MyBatis找不到对应SQL语句,可能抛出绑定异常或返回null。

  • 查看堆栈跟踪定位NPE具体位置
    分析异常堆栈信息,确认NPE发生在sqlSession.selectOne调用时,还是结果赋值阶段:

    • 若发生在调用时:必然是sqlSession为null;
    • 若发生在赋值阶段:可能是MyBatis返回了null,当用int接收时拆箱失败(但你已改为Integer仍有问题,需进一步排查SQL执行是否异常)。

内容的提问来源于stack exchange,提问作者SectionPJY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:20:21