Mybatis操作数据库报空指针的解决

Mybatis操作数据库报空指针的解决

背景

环境:Springboot+ mybatis

今天,报了个很奇怪的空指针异常,排查了一会,最终才发现问题,记录一下。

报错信息

exception found: java.lang.NullPointerException, null
java.lang.NullPointerException: null

mybatis的dao代码

 List<UserInfo> queryUserInfo(@Param("name") String name, @Param("mobile")  String mobile,   @Param("status")byte status);
 
 SELECT *
    from
    user_info user
    LEFT JOIN user_rule_map map ON user.id = map.userId
    LEFT JOIN user_info truck ON rule.id = map.ruleId
	<where>
        <if test="name != null">
          user.name=#{name,jdbcType=VARCHAR}
        </if>
      <if test="mobile != null">
        and user.mobile=#{mobile,jdbcType=VARCHAR}
      </if>
      <if test="status != null">
        and map.status=#{status,jdbcType=TINYINT}
      </if>
    </where>
  </select>

错误原因

排查了半天,才发现status的类型写成了byte类型。
我们知道,Mybatis的 #{} 是调用了PreparedStatement的set方法,如果不是对象而是基本类型的话,是拿不到这个status的值的,而且这里指定了jdbcType=TINYINT。

解决

status的类型改为byte的包装类 Byte

反思

  1. 在Mybatis中如果单独传递参数,参数类型必须是对象类型(基本类型是其包装类)
  2. 如果是自定义对象,必须实现/重写其Get/Set方法
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解决SpringBoot Mybatis查询数据库时出现空指针异常的问题,可以尝试以下几个步骤: 1. 确保数据库相关配置正确: 根据引用中的代码片段,检查你的配置文件中的数据库驱动类和连接URL是否正确。确保驱动类是com.mysql.jdbc.Driver,连接URL中包含正确的数据库名称和字符编码设置。 2. 确保相关依赖和jar包正确引入: 根据引用提到的压缩包中的代码和jar包,确保你的项目中正确引入了Mybatis数据库相关的依赖。 3. 确保测试类正确配置: 根据引用中的代码片段,确保你的测试类上加上了@RunWith(SpringRunner.class)和@SpringBootTest注解,并且注入了相应的UserService。 4. 检查查询逻辑: 在你的测试方法中,确保你的查询逻辑正确。比如,如果你在查询方法中使用了空指针对象,可能会导致空指针异常。确保你的查询方法返回的结果不为空,并且你正确处理了可能出现的空指针情况。 如果你按照以上步骤检查并且问题仍然存在,可以进一步检查日志文件或调试你的代码,以便更详细地了解问题出现的原因并进行排查。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot mybatis gbase](https://download.csdn.net/download/mazhitao1986/10300546)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [springboot+mybatis空指针异常问题](https://blog.csdn.net/geejkse_seff/article/details/124036318)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [springboot整合mybatis测试发生空指针异常](https://blog.csdn.net/weixin_48526216/article/details/126689350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值