查找的时候,如何覆盖文本的like查询替换为=
省略号 发布于79月前 8答/2090阅

我的原始需求是:  查找的时候,如何覆盖 文本的  like 查询,

实现过程中遇到的问题:

让用 =  来查询,在前置拦截器 queryBefore中添加自定义后 ,发现sql  是

where  mobile  like ?  and  mobile = ? ,想让 直接 where mobile =?

添加的:

    @Override
    public void queryBefore(AopContext ac) throws Exception {
        super.queryBefore(ac);
        String mobile = ac.ctrl.getPara("query_mobile");
        if(!xx.isEmpty(mobile)){
            ac.condition = " and mobile = ?";
            ac.params.add(mobile.trim());
        }
    }


源码解读:(专业版3.6.x)


// 数字框
		if (type.equals(MetaField.TYPE_NUM)) {
			// 数字框与文本框取值兼容
			if (!xx.isEmpty(value))
				start = value;
			return numType(field, start, end, cond);
		}

		// 时间框
		if (type.equals(MetaField.TYPE_TIME)) {
			return new KeyVal(timeCondition(field), start + "," + end);
		}

		// 日期框
		if (type.equals(MetaField.TYPE_DATE)) {
			return new KeyVal(dateCondition(field), start + "," + end);
		}

		// 数字类型都是精确查询: mysql *int || order number||long 
		if (dataType.contains("int") || dataType.equals("number") || dataType.equals("long")) {
			return new KeyVal(" and " + field + " = ?", value);
		}

		// 文本框
		if (type.equals(MetaField.TYPE_TEXT) || type.equals(MetaField.TYPE_TEXTS) || type.equals(MetaField.TYPE_EDIT)) {
			return new KeyVal(" and " + field + " like ?", "%" + value + "%");
		}

		return new KeyVal(" and " + field + " = ?", value);



[沙发] 省略号
通过 拦截器就可以
可以篡改 查询条件
查询后置拦截里面搞事情


a.加一个虚拟字段 禁用原字段 自己 拼 一个 x = ?
[地板] Jieven
@省略号 对 禁用原字段,然后新增一个虚拟字段,相当于狸猫换太子
[地毯] liuguanlin
@Jieven 大多数都用=  那有默认全部like 文本框 ,这样数据库会炸啊,没索引 这里设计不是很人性啊 有点奇葩。一般只有like是少数的 可以定义拦截器去做,默认当然用= 啊是吧
[4楼] liuguanlin
@Jieven 还有 这个条件用like还是等于还是 in 还是not in 类似的应该可以在:元字段编辑里面 配置才好
[5楼] liuguanlin
@Jieven 20个条件都用 = 我是不是要加20多个虚拟字段??一个条件还好,多个条件 搞死人的。建议默认 文本框 =查询,文本域 like 查询 
[6楼] Jieven
@省略号 like的好处是, 你搜全部, 能精准查出那个手机号, 你输入135也能查出, 并且手机号只是众多字符串搜索的一个场景, 大部分字符串搜索都是 模糊搜索, 没毛病, 这个不是技术实现问题, 是需求问题.当然你说的也有道理, 一个手机查询, 要定义20多次. 确实不爽, 怎么办? 可以自定义一个文本框, 作为查询手机的(PS:自定义控件 默认命中 xxx = ?)
[7楼] Jieven
@省略号 自定义控件 怎么做? 查看 eova_widget 表
[8楼] Jieven
@liuguanlin 自定义控件 怎么做? 查看 eova_widget 表
提交评论