【mybatis】Error querying database. Cause: java.lang.NullPointerException

在今天写一个统计数据的mapper时,在测试的时候尽然报错了,报错原因如下:

ERROR m.e.handler.GlobalExceptionHandler - 
nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  
Cause: java.lang.NullPointerException
### Cause: java.lang.NullPointerException
org.mybatis.spring.MyBatisSystemException: 
nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. 
 Cause: java.lang.NullPointerException
### Cause: java.lang.NullPointerException

这个一看就是因为空指正Error querying database. Cause: java.lang.NullPointerException这个的原因,下面列出我mapper层的sql

@Select({
        "<script>",
        "<choose>",
        "<when Test='emailDTO.caseId==3'>",
        "SELECT DISTINCT u.`username`,d.`name` dept_name,u.`phone`,SUM(IF(nu.`option_id`=0,0,1))/COUNT(nu.`user_id`) completions,nu.`view_time`,nu.`update_time` feedback_time FROM xiaoyun_notify_user nu\n",
        "</when>",
        "<when Test='emailDTO.caseId==1'>",
        "SELECT DISTINCT u.`username`,d.`name` dept_name,u.`phone`,nu.`view_time`, nu.update_time  feedback_time,o.`option_content` FROM xiaoyun_notify_user nu",
        "</when>",
        "<when Test='emailDTO.caseId==2'>",
        "SELECT DISTINCT u.`username`,d.`name` dept_name,u.`phone`,nu.`view_time`, nu.update_time  feedback_time,nu.`chains_content` FROM xiaoyun_notify_user nu",
        "</when>",
        "<otherwise>",
        "SELECT DISTINCT u.`username`,d.`name` dept_name,u.`phone`,nu.`view_time`, nu.update_time  feedback_time,o.`option_content` FROM xiaoyun_notify_user nu",
        "</otherwise>",
        "</choose>",
        "LEFT JOIN xiaoyun_option o ON nu.`option_id`=o.`id`\n",
        "LEFT JOIN xiaoyun_user u ON nu.`user_id`=u.`id`\n",
        "LEFT JOIN xiaoyun_dept d ON nu.`dept_id`=d.`id`\n",
        "WHERE nu.`notify_id`=#{emailDTO.id} \n",
        "<if Test='userId!=null'>",
        "and nu.`create_by`=#{userId}",
        "</if>",
        "GROUP BY nu.`user_id`\n",
        "ORDER BY nu.`dept_id`",
        "</script>"
})

其实这个是不建议这样写的,因为这样写在后期也是不容易维护的,而且维护人员在维护的时候也会吐槽,这写的是什么鬼……

我们现在来看为什么报这个错误:
我看了快十来分钟也没检查出啥问题,明明感觉sql写的没问题啊
忽然,发现<if></if>标签中的 test 是大写的,当时认为mybatis其内部或许有大小写转换的,但在将Test 改为test后,发现可以运行,所以,在mapper层中我们要注意这些细节问题

总结:
其实写的多了我们就会发现,对于Error querying database. 这样的错误,很多情况下都是我们没有仔细写而引起的书写错误,在以后发现此类问题,我们多查看检查问题,肯定可以找出问题的。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值