登录
首页 >  文章 >  java教程

Mybatis报错“Invalid bound statement”,如何快速定位到调用delete语句的代码?

时间:2024-12-16 13:52:07 484浏览 收藏

golang学习网今天将给大家带来《Mybatis报错“Invalid bound statement”,如何快速定位到调用delete语句的代码?》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习文章或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

Mybatis报错“Invalid bound statement”,如何快速定位到调用delete语句的代码?

如何通过提示定位到调用 delete 的代码?

在本例中,控制台输出指出了一个 invalid bound statement (not found) 异常,它表明 mybatis 找不到名为 delete 的绑定语句。

定位调用 delete 的代码:

异常信息中最有用的部分是:

at com.mooc.house.biz.service.mailservice$1.onremoval(mailservice.java:34)

这表明 delete 正在由 mailservice.java 中的 onremoval 方法调用。

分析代码:

mailservice.java 中的 enable 方法使用了 guava 的缓存,并指定了在移除缓存项时调用 onremoval 的移除侦听器。

private final Cache<String, String> registerCache = CacheBuilder.newBuilder()
    .maximumSize(100)
    .expireAfterAccess(15, TimeUnit.MINUTES)
    .removalListener(new RemovalListener<String, String>() {
        @Override
        public void onRemoval(RemovalNotification<String, String> notification) {
            userMapper.delete(notification.getValue());
        }
    })
    .build();

当缓存项被移除时,移除侦听器回调 usermapper.delete(notification.getvalue()),这会删除与该缓存项关联的记录。

因此,在你的情况下,似乎是 registercache.invalidate(key) 使缓存无效并导致 onremoval 被调用,最终触发了对 usermapper.delete 的调用,从而删除了用户记录。

理论要掌握,实操不能落!以上关于《Mybatis报错“Invalid bound statement”,如何快速定位到调用delete语句的代码?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>