异常信息
在写mybatis拦截器时,报错提示如下信息:
Caused by: org.apache.ibatis.plugin.PluginException: Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.statement.StatementHandler.prepare(com.mysql.jdbc.Connection)
at org.apache.ibatis.plugin.Plugin.getSignatureMap(Plugin.java:85)
at org.apache.ibatis.plugin.Plugin.wrap(Plugin.java:44)
at com.ruiyin.common.interceptor.ShardTableInterceptor.plugin(ShardTableInterceptor.java:81)
at org.apache.ibatis.plugin.InterceptorChain.pluginAll(InterceptorChain.java:31)
at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:469)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:58)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:96)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:77)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:66)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)
... 67 more
解决方案
在注解中args的Connection的引用错误正确的应该是,java.sql.Connection;
@Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class})})
public class ShardTableInterceptor implements Interceptor {