记一次idea环境导致的数据库报错

1. 问题

下午测试一个get接口时,mybatis一直报错,有如下两个异常信息:

  • MyBatisSystemException with kryo’s ClassLoader. Retrying with current
  • Expected one result to be returned by selectone(),but found 344

本身入参是一个id,查出来的数据应该是一个,但是此时提示查出表中所有的数据,所以报异常了。

2. 代码业务

  • 数据库语句,so easy
       @Override
        public AccessPolicyAnalysisResult get(AccessPolicyAnalysisResult model) throws ServiceException {
            return super.get(model);
        }
  • mybatis对应的xml语句
<select id="get" resultType="AccessPolicyAnalysisResult">
        <include refid="access_policy_analysis_mapping_column"/>
        <where>
            <if test="globalId != null ">
                and global_id = #{globalId}
            </if>
            <if test="applyId != null ">
                and apply_id = #{applyId}
            </if>
        </where>
        limit 1
    </select>

3. 定位思路

  1. 首先当然是检查代码,但是未发现异常;
  2. 手动执行sql语句,可以正常查出一条数据;
  3. 因为公司的框架,log设置成debug,就可以打印sql语句了。所以修改成debug,发现什么log都没有,正常的业务log也没有。此时感觉可能和环境有关。
  4. 重启idea,项目没有自动加载,然后手动导入项目,配置maven、jdk,再次启动tomcat,问题解决。

4. 问题原因

我在调试这个接口之前,修改了一下mapper.xml配置文件,因为我的入参是applyId不是主键,所以我添加了上面sql语句中的如下内容:

 <if test="applyId != null ">
      and apply_id = #{applyId}
 </if>

增加这个判断之后,并没有重新编译项目,直接启动tomcat,导致tomcat并没有加载到变更。此时通过applyId查找不到特定的那条数据,故出现以上异常。

5. 问题总结

问题不复杂,但是耽误了一些时间;教训就是,遇到问题要多思考,尤其是这种感觉代码没有问题的时候,可以想想外观因素。不能盲目的一直定位代码问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值