文档章节

jeecg3.5中自动构造查询条件的一个比较严重的bug

z_jordon
 z_jordon
发布于 2015/04/27 17:03
字数 433
阅读 2127
收藏 0

当数据库字段的类型为数字型,如为integer类型时,如果把该字段设置为查询条件,并且为范围查询,如下:

 <t:dgCol title="统计日期" field="sumDate" query="true" queryMode="group"></t:dgCol>

其中sumDate在数据库中是int型的,这时生成的界面如下:

这时如果输入一个数字型的值,如20150401,会报类型转换错误。

原因是在org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil的这个类中的installHqlJoinAlias方法中拼装查询条件时没有根据字段的类型来判断,原来的代码是这样子的:

// 添加 判断是否有区间值
String beginValue = null;
String endValue = null;
...
//这边没有判断当前的字段是什么类型统一传的都是String类型的值,当字段类型为数字型时会出错
ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.GE, beginValue);
ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.LE, endValue);

我的解决方案是根据字段的类型判断判断需要传入的类型,如下,

//单独写一个方法来处理类型的判断和转换
private static void addCriteria(String value, CriteriaQuery cq, String aliasName, HqlRuleEnum rule, String type) {
		if (StringUtil.isNotEmpty(value)) {
			if (type.equals("class java.lang.Integer")) {
				ObjectParseUtil.addCriteria(cq, aliasName,
						rule, new Integer(value));
			} else if (type.equals("class java.lang.Long")) {
				ObjectParseUtil.addCriteria(cq, aliasName,
						rule, new Integer(value));
			} else if (type.equals("class java.lang.Double")) {
				ObjectParseUtil.addCriteria(cq, aliasName,
						rule, new Double(value));
			} else if (type.equals("class java.lang.Float")) {
				ObjectParseUtil.addCriteria(cq, aliasName,
						rule, new Float(value));
			} else {
				ObjectParseUtil.addCriteria(cq, aliasName,
						rule, value);
			}
			
		}
	}

修改后的代码如下:

addCriteria(beginValue, cq, aliasName, HqlRuleEnum.GE, type);
						addCriteria(endValue, cq, aliasName, HqlRuleEnum.LE, type);
//这边没有判断当前的字段是什么类型统一传的都是String类型的值,当字段类型为数字型时会出错
//ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.GE, beginValue);
//ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.LE, endValue);					
						
					}


© 著作权归作者所有

共有 人打赏支持
z_jordon
粉丝 36
博文 251
码字总数 78212
作品 0
厦门
技术主管
私信 提问
Mybatis 分页插件 3.3.1 发布

如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。 3.3.1更新说明: 该版本主要修...

Liuzh_533
2014/12/08
2.5K
10
BugFree 3.0.1 正式发布!

点击下载BugFree 3.0.1 主要更新如下: 易用性改进 URL引用简化 ../index.php?r=info/index&type=bug&product_id=2 => ../bug/list/2 ../index.php?r=info/edit&type=bug&id=27 => ../bug/2......

红薯
2012/01/03
2K
2
yii2使用原生语句执行数据库操作yii\db\Query和yii\db\Command

某些情况下我们并不需要启用比较重的AR去操作数据库,这里Yii2也为我们提供了 yiidbQuery 查询构造器 只能创建 查询 命令 yiidbCommand sql命令工具 可以创建 curd 操作 两个工具类来满足此类...

big_cat
2016/05/13
556
0
2018-08-22期 Hbase客户端API操作(数据查询,Scan方式)

package cn.itcast.bigdata.hbase; import java.io.IOException; import java.io.InterruptedIOException; import java.util.ArrayList; import java.util.Iterator; import org.apache.comm......

JackmaSong
2018/08/22
0
0
jeecg3.5中为dgCol标签增加自定义格式化列中的数值的功能

jeecg3.5中只有formatter属性,只支持格式化时间格式的数据,不支持自定义格式化列中的值的功能,比如想把列中的的一个int或long型的值除以100转成float或doulbe值,jeecg3.5版本就不支持类似...

z_jordon
2015/04/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL学习笔记之二

数据库的操作总结就是:增删改查(CURD),今天记录一下基础的检索查询工作。 检索MySQL 1.查询表中所有的记录 mysql> select * from apps;+----+------------+-----------------------+------...

凌宇之蓝
25分钟前
0
0
PaddlePaddle-GitHub的正确打开姿势

GitHub是一个面向开源及私有软件项目的托管平台、也是项目版本管理工具,会使用它是程序员入门的必备技能。PaddlePaddle也不例外,所有的源码及项目进展都在GitHub上开源公布。但对于刚入门写...

深度学习之路
25分钟前
1
0
最强NLP模型BERT可视化学习

摘要: 最强NLP模型谷歌BERT狂破11项纪录,全面超越人类,本文通过可视化带你直观了解它。 2018年是自然语言处理(Natural Language Processing, NLP)领域的转折点,一系列深度学习模型在智...

阿里云官方博客
32分钟前
1
0
导出功能

public void downloadD(HttpServletRequest request, HttpServletResponse res,String contractName, String contractPath) throws IOException {// FileAttach fileAttach = fileA......

卖星星的小矮人
36分钟前
1
0
gradle 打包可执行jar包

group 'android.com'version '1.0-SNAPSHOT'apply plugin: 'java'sourceCompatibility = 1.8repositories { mavenCentral()}jar { manifest { attributes ('Main-......

zdglf
47分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部