
如何通过提示定位到调用 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 CacheregisterCache = 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 的调用,从而删除了用户记录。










