如何通过提示定位到调用 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 registerCache = CacheBuilder.newBuilder()
    .maximumSize(100)
    .expireAfterAccess(15, TimeUnit.MINUTES)
    .removalListener(new RemovalListener() {
        @Override
        public void onRemoval(RemovalNotification notification) {
            userMapper.delete(notification.getValue());
        }
    })
    .build();
登录后复制

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

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

以上就是Mybatis报错“Invalid bound statement”,如何快速定位到调用delete语句的代码?的详细内容,更多请关注慧达安全导航其它相关文章!

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部