ofbiz总结——使用performFind查询时如何设置查询条件值为null的情况
来源:互联网 发布:程序员刚入职很闲 编辑:程序博客网 时间:2024/06/06 02:51
在使用performFind查找时,希望有个查询条件默认为null。比如:
<set field="requestParameters.result" value="null"/>当然上面的配置是无法达到目的的,只会导致查询出满足result='null'的记录。
通过分析performFind服务的源码,得出解决方案:
<set field="requestParameters.result_op" value="empty"/>这样配置后就会在查询是加上条件 result is null
具体分析步骤:
1. 找到performFind服务的实现源码。源码位置在framework\common\src\main\java\org\apache\ofbiz\common\FindServices.java文件中。
2. 具体调用流程 performFind方法 ——》prepareFind方法 ——》createConditionList方法。关键地方就在createConditionList方法。
public static List<EntityCondition> createConditionList(Map<String, ? extends Object> parameters, List<ModelField> fieldList, Map<String, Object> queryStringMap, Delegator delegator, Map<String, ?> context) { Set<String> processed = new LinkedHashSet<String>(); Set<String> keys = new LinkedHashSet<String>(); Map<String, ModelField> fieldMap = new LinkedHashMap<String, ModelField>(); for (ModelField modelField : fieldList) { fieldMap.put(modelField.getName(), modelField); } List<EntityCondition> result = new LinkedList<EntityCondition>(); for (Map.Entry<String, ? extends Object> entry : parameters.entrySet()) { String parameterName = entry.getKey(); if (processed.contains(parameterName)) { continue; } keys.clear(); String fieldName = parameterName; Object fieldValue = null; String operation = null; boolean ignoreCase = false; if (parameterName.endsWith("_ic") || parameterName.endsWith("_op")) { fieldName = parameterName.substring(0, parameterName.length() - 3); } else if (parameterName.endsWith("_value")) { fieldName = parameterName.substring(0, parameterName.length() - 6); } String key = fieldName.concat("_ic"); if (parameters.containsKey(key)) { keys.add(key); ignoreCase = "Y".equals(parameters.get(key)); } key = fieldName.concat("_op"); if (parameters.containsKey(key)) { keys.add(key); operation = (String) parameters.get(key); } key = fieldName.concat("_value"); if (parameters.containsKey(key)) { keys.add(key); fieldValue = parameters.get(key); } if (fieldName.endsWith("_fld0") || fieldName.endsWith("_fld1")) { if (parameters.containsKey(fieldName)) { keys.add(fieldName); } fieldName = fieldName.substring(0, fieldName.length() - 5); } if (parameters.containsKey(fieldName)) { keys.add(fieldName); } processed.addAll(keys); ModelField modelField = fieldMap.get(fieldName); if (modelField == null) { continue; } if (fieldValue == null) { fieldValue = parameters.get(fieldName); } if (ObjectType.isEmpty(fieldValue) && !"empty".equals(operation)) { continue; } result.add(createSingleCondition(modelField, operation, fieldValue, ignoreCase, delegator, context)); for (String mapKey : keys) { queryStringMap.put(mapKey, parameters.get(mapKey)); } } return result; }
3. 分析上面的代码,必须满足下面条件才能把条件为null的加入进去。
if (ObjectType.isEmpty(fieldValue) && !"empty".equals(operation)) { continue; }所以最终分析得出解决方案,只需要配置“_op“后缀值为empty就可以了。
<set field="requestParameters.result_op" value="empty"/>
阅读全文
0 0
- ofbiz总结——使用performFind查询时如何设置查询条件值为null的情况
- 使用DetachedCriteria 模糊查询中值为null时的情况
- 查询条件有null的情况
- mysql查询时给值为null的设置默认值
- oracle数据库解决查询值为null的情况
- sql查询条件为null的查询语句
- ofbiz总结——查询实体时关于orderBy值的格式问题
- DB2查询时如果为null值,设置默认值
- 在使用mybatis时遇到查询结果返回为空(NULL)的情况,但是查数据库能查到
- MSSQL查询语句条件是否为NULL
- 查询条件为当前年份减一的情况
- 查询值为null
- MyBatis查询返回Map时设置值为null的字段也在结果集中
- 润乾报表DQL组件如何为查询字段的检索条件设置编辑风格
- 查询值为null的记录
- sql 查询数据为NULL的值
- SQL学习笔记8——查询到数据库的值为null在C#中如何判断
- sql查询 group by 数字类型+null 为null 处理 ,sum()的结果作为条件再次查询。
- Python3 lambda函数的深入浅出
- 自定义View2——画线、矩形、圆形、.写字,图像
- JS 循环依赖 (require cycle)
- 应用程序无法执行,检查是否缺少文件(dll)
- java学习开端
- ofbiz总结——使用performFind查询时如何设置查询条件值为null的情况
- 字符串匹配算法Sunday实现(二)
- 微信隐藏/显示右上角菜单接口
- 10.24初级题
- C++如何获取文件属性
- 虚拟机无法启动问题
- 英语语法总结
- 一、MongoDB安装,连接,备份与恢复
- ERROR ITMS-90717: "Invalid App Store Icon. The App Store Icon in the asset catalog in ‘***.app' can'