mybatis 自带的框架,使用时有问题
在测试用例中直接调用selectPage 会出现错误:
### Error querying database. Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'criteria.valid'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: cn.com.baby.weibo.dao.ibatis.Critirias$Criteria.valid
### The error may exist in cn/com/baby/weibo/dao/ibatis/sqlmap/Tweet.xml
### The error may involve TweetMapper.selectByCritirias
### The error occurred while executing a query
### Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'criteria.valid'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: cn.com.baby.weibo.dao.ibatis.Critirias$Criteria.valid
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:61)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:53)
at cn.com.baby.weibo.dao.ibatis.IbatisBaseDao.list(IbatisBaseDao.java:92)
at cn.com.baby.weibo.dao.ibatis.IbatisTweetDao.selectByCritirias(IbatisTweetDao.java:77)
at cn.com.baby.weibo.dao.ibatis.IbatisTweetDao.selectPage(IbatisTweetDao.java:122)
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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy18.selectPage(Unknown Source)
at cn.com.baby.weibo.dao.ibatis.EntityManager.selectPage(EntityManager.java:186)
... 25 more
Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'criteria.valid'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: cn.com.baby.weibo.dao.ibatis.Critirias$Criteria.valid
at org.apache.ibatis.builder.xml.dynamic.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:20)
at org.apache.ibatis.builder.xml.dynamic.IfSqlNode.apply(IfSqlNode.java:15)
at org.apache.ibatis.builder.xml.dynamic.MixedSqlNode.apply(MixedSqlNode.java:14)
at org.apache.ibatis.builder.xml.dynamic.ForEachSqlNode.apply(ForEachSqlNode.java:55)
at org.apache.ibatis.builder.xml.dynamic.MixedSqlNode.apply(MixedSqlNode.java:14)
at org.apache.ibatis.builder.xml.dynamic.TrimSqlNode.apply(TrimSqlNode.java:27)
at org.apache.ibatis.builder.xml.dynamic.MixedSqlNode.apply(MixedSqlNode.java:14)
at org.apache.ibatis.builder.xml.dynamic.MixedSqlNode.apply(MixedSqlNode.java:14)
at org.apache.ibatis.builder.xml.dynamic.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:22)
at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:198)
at org.apache.ibatis.executor.BaseExecutor.createCacheKey(BaseExecutor.java:114)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:83)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:68)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:59)
... 41 more
Caused by: org.apache.ibatis.ognl.NoSuchPropertyException: cn.com.baby.weibo.dao.ibatis.Critirias$Criteria.valid
at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:115)
at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1529)
at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:84)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:175)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:213)
at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:107)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:175)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:213)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:314)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:394)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:435)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:414)
at org.apache.ibatis.builder.xml.dynamic.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:15)
... 54 more
selectPage中有两次查询调用
this.selectByCritirias(critirias);
this.countByCritirias(critirias);
debug ibatis 源码发现,ibatis内嵌的ognl,在解析表达式criteria.valid,第一次解析出来 criteria.valid 的 readmethod, returnType, 并存入缓存map,第二次直接获得map的value时,丢失了readmethod。所以出现异常
这个异常在测试系统和正式系统中都不会出现,怀疑是jdk的bug。
如果需要在本地测试。可在调用 selectPage 前先调用一次selectByPrimaryKey。
分享到:
相关推荐
Ibatis和Mybatis都是广泛使用的Java ORM(对象关系映射)框架,它们帮助开发者将数据库操作与业务逻辑解耦。本篇文章将探讨从ibatis2.x升级到mybatis3.x的过程,揭示其中的技术变迁和核心变化。 Ibatis2.x是一款轻...
个人博客系统(SpringBoot+Mybatis).zip个人博客系统(SpringBoot+Mybatis).zip个人博客系统(SpringBoot+Mybatis).zip个人博客系统(SpringBoot+Mybatis).zip个人博客系统(SpringBoot+Mybatis).zip个人博客...
中秋博饼游戏(Swing+Spring+MyBatis).zip中秋博饼游戏(Swing+Spring+MyBatis).zip 中秋博饼游戏(Swing+Spring+MyBatis).zip中秋博饼游戏(Swing+Spring+MyBatis).zip 中秋博饼游戏(Swing+Spring+MyBatis).zip中秋博饼...
简易的中秋博饼游戏(Swing+Spring+MyBatis).zip 简易的中秋博饼游戏(Swing+Spring+MyBatis).zip 简易的中秋博饼游戏(Swing+Spring+MyBatis).zip 简易的中秋博饼游戏(Swing+Spring+MyBatis).zip 简易的中秋博饼游戏...
mybatis 3.x源码深度解析与最佳实践.html
myBatis3.2.2.jar
MyBatis是一个强大的Java持久层框架,它简化了数据库与应用程序之间的交互,使得开发者能够更加专注于SQL和业务逻辑的编写,而无需关心底层的JDBC代码。MyBatis的资料库通常包含各种必要的组件和文档,以帮助开发者...
MyBatis 3.x 源码深度解析与最佳实践 MyBatis 是当前最流行的 Java 持久层框架之一,其通过 XML 配置的方式消除了绝大部分 JDBC 重复代码以及参数的设置,结果集的映射。为了更好地学习和理解 MyBatis 背后的设计...
该jar包为最新的适配mybatis3.2.X及以上的版本。同时向下兼容mybatis的版本。mybatis整合spring jar包 mybatis-spring-1.2.3.jar
这个压缩包文件“mybatisx.zip”包含了多个版本的MybatisX插件,包括MybatisX-1.4.16.zip、MybatisX-1.4.8.zip、MybatisX-1.4.6.zip以及MybatisX-1.1.2.zip。这些版本的差异可能体现在功能增强、性能优化或者修复...
【标题】"free-idea-mybatis2020.9.15.rar" 提供的资源是关于MyBatis框架的一个特定版本,结合了IntelliJ IDEA这一流行的Java开发集成环境。这个压缩包很可能是包含了特定日期(2020年9月15日)的MyBatis插件或者与...
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 ...
MyBatis笔记.md
free-idea-mybatis is an enchange plugin for idea to supoort mybatis,here is the main functions: generate mapper xml files navigate from the code to mapper and from the mapper back to code auto code...
>Window->prefenrence->XML->XML Catalog->User Specifiled Entreis->Add->Location(此处是你放dtd文件的位置例如:D:\mybatis\mybatis-3-config.dtd)->Key(如果更改config,此处应该是:-//mybatis.org//DTD ...
Java校园组团平台使用SpringBoot+MyBatis框架.zipJava校园组团平台使用SpringBoot+MyBatis框架.zipJava校园组团平台使用SpringBoot+MyBatis框架.zip
MyBatis 3.1.1.chm,mybatis开发帮组文档
Java智慧校园之家长子系统使用SpringBoot+MyBatis框架.zipJava智慧校园之家长子系统使用SpringBoot+MyBatis框架.zipJava智慧校园之家长子系统使用SpringBoot+MyBatis框架.zip
11.mybatis 2.zip
Mybatis入门.md