红框部分(,sum(if(Item_169 REGEXP '^[0-9]{1,12}(.[0-9]{1,5})?$',Item_169,0)))后台传入mybatis配置文件(配置文件用${}接收),整个sql复制到mysql数据库正常运行;这个问题怎么解决
红框部分(,sum(if(Item_169 REGEXP '^[0-9]{1,12}(.[0-9]{1,5})?$',Item_169,0)))后台传入mybatis配置文件(配置文件用${}接收),整个sql复制到mysql数据库正常运行;这个问题怎么解决
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
2 回答2.8k 阅读✓ 已解决
问题:不是正则表达式的问题,而是Mybatis类型转化的问题
解决方案:为sum的结果添加一个别名data
问题原因
TZ的mapper文件可简化为如下文件
问题在于Mybatis对结果的属性设置,由于返回结果的类型为java.util.Map,调用函数DefaultResultSetHandler.createAutomaticMappings(**),
首先获取参数类型:
接着我们会看到PropertyTokenizer(属性标记器),主要用来处理反射类的属性名,
问题就出在这个地方。
这里propertyName 是 sum(if(item REGEXP '^[0-9]{1,12}(.[0-9]{1,5})?$',item,0)),得到的PropertyTokenizer对象内容如下:
接着根据prop.getIndex()判断结果是一个集合对象,实际上结果就是一个Double对象,抛出一个类型错误。
所以建议不使用java.lang.Map类型作为结果,一般自定义对象或者建立resultMap类型。