问题:

@Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class }) })
public class PaginationInterceptor implements Interceptor {......}
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error opening session.  Cause: 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(java.sql.Connection)
### Cause: 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(java.sql.Connection)
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource(DefaultSqlSessionFactory.java:100)
    at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession(DefaultSqlSessionFactory.java:47)
    at com.baomidou.mybatisplus.test.UserMapperTest.main(UserMapperTest.java:73)
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(java.sql.Connection)
    at org.apache.ibatis.plugin.Plugin.getSignatureMap(Plugin.java:87)
    at org.apache.ibatis.plugin.Plugin.wrap(Plugin.java:44)
    at com.baomidou.mybatisplus.plugins.PaginationInterceptor.plugin(PaginationInterceptor.java:185)
    at org.apache.ibatis.plugin.InterceptorChain.pluginAll(InterceptorChain.java:31)
    at org.apache.ibatis.session.Configuration.newExecutor(Configuration.java:546)
    at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource(DefaultSqlSessionFactory.java:96)
    ... 2 more
Caused by: java.lang.NoSuchMethodException: org.apache.ibatis.executor.statement.StatementHandler.prepare(java.sql.Connection)
    at java.lang.Class.getMethod(Class.java:1605)
    at org.apache.ibatis.plugin.Plugin.getSignatureMap(Plugin.java:84)
    ... 7 more

问题原因:

MyBatis 3.4.0 之后,StatementHandler的prepare方法做了修改

Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException;

解决方法:

1.修改为

@Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class, Integer.class })})

2.降低MyBatis版本号


感谢大家的阅读, 如有疑问可以加我微信