最近在看mybatis的源码,因为之前学习mybatis直接就和spring整合使用了,平时也就写写mapper文件之类的,对mybatis的使用并不是很了解,于是打算自己从使用到源码重头整理一遍,刚搭建好环境,写了一个测试,就出现了这个错误。错误的详细信息如下:
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.RuntimeException: MemberAccess implementation must be provided!
### Cause: java.lang.RuntimeException: MemberAccess implementation must be provided!
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:139)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:76)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy3.executeQuery(Unknown Source)
at stu.kgh.mybatis.HelloWorld.main(HelloWorld.java:27)
Caused by: java.lang.RuntimeException: MemberAccess implementation must be provided!
at ognl.OgnlContext.<init>(OgnlContext.java:140)
at ognl.OgnlContext.<init>(OgnlContext.java:110)
at ognl.Ognl.createDefaultContext(Ognl.java:178)
at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:43)
at org.apache.ibatis.scripting.xmltags.TextSqlNode$BindingTokenParser.handleToken(TextSqlNode.java:77)
at org.apache.ibatis.parsing.GenericTokenParser.parse(GenericTokenParser.java:78)
at org.apache.ibatis.scripting.xmltags.TextSqlNode.apply(TextSqlNode.java:51)
at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)
at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:41)
at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:292)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
... 6 more
在网上找了好多,关于 Error querying database. 这个错误出现的可能性很多,但是提到MemberAccess implementation must be provided!就几乎没有答案了。
解决方法很简单,就是ognl的包的版本不对,最开始使用的是
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.2.6</version>
</dependency>
换成2.7.3这个版本就可以了。代码如下:
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>2.7.3</version>
</dependency>