MyBatis中增加分页,发现报这个错。研究了很久,记录一下,权当抛砖引玉吧。
先把错误贴出来:
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_criterion_1' in 'class com.firework.xxxx.entity.Criteria'
at org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:409)
at org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:164)
at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:162)
at org.apache.ibatis.reflection.wrapper.BeanWrapper.get(BeanWrapper.java:49)
at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:122)
at org.apache.ibatis.reflection.MetaObject.metaObjectForProperty(MetaObject.java:145)
at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:115)
at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:79)
at com.firework.xxxx.plugins.PaginationInterceptor.count(PaginationInterceptor.java:148)
at com.firework.xxxx.plugins.PaginationInterceptor.intercept(PaginationInterceptor.java:104)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy64.prepare(Unknown Source)
at org.apache.ibatis.executor.ReuseExecutor.prepareStatement(ReuseExecutor.java:89)
at org.apache.ibatis.executor.ReuseExecutor.doQuery(ReuseExecutor.java:59)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
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:434)
at com.sun.proxy.$Proxy32.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:239)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:126)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:68)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
从报错中提取出来的信息是,未定义“__frch_criterion_1”,觉得奇怪,我从没有定义这个啊,于是百度了一下,
发现这类问题还是很多的。于是开启了大海捞针模式,终于功夫不负苦心人,找到了这样一篇博客,
http://www.fx114.net/qa-29-326871.aspx
大意是:
创建的newBoundSql相比较从MappedStatement中取得的boundSql丢失了additionalParameters
终于有点眉目了,但是这里并没有说具体是哪里丢失了,只有继续分析错误信息。
意思是:PaginationInterceptor类中中count方法148行报错,然后进行一系列的分析。
首先,获取 boundSql.getParameterMappings();
看看输出的信息,发现确实是需要的信息,
贴出148行左右的源码。
加上注释的那段代码,再一执行,发现问题解决了。
这个问题花了我足足半天时间才解决,特意记录一下整个问题解决的过程。