• 高级模糊搜索条件设置,支持简单表达式(列表查询条件,如金额:》=50,《=100等)



    原创地址:https://blog.csdn.net/QQ826688096/article/details/89075836

    想要实现一个功能,就是,在页面的查询条件里面,可以在一个输入框里面,让用户可以
    模糊搜索金额;支持像 >、>=、<、<=、=、>=20,<=50等一些基本的运算符的表达式。

    在这里插入图片描述

    输入框的Title 可以设置为:
    请输入要查询的金额范围,例如:
    大于某个数值:>5000,表示支出金额大于5000元
    大于等于数值:>=500,表示支出金额大于并包含500元
    金额区间数值:>=500,<=1000,表示大于等于500并且小于等于1000元
    【注意:请使用英文模式下的符号】
    输入框的默认placeholder提示内容可以设置为:~ 例如:>=500,<=1000 ~

    设计步骤:

    1,jsp页面代码

    <td title="请输入要查询的金额范围,例如:&#10;大于某个数值:>5000,表示支出金额大于5000元&#10;大于等于数值:>=500,表示支出金额大于并包含500元&#10;金额区间数值:>=500,<=1000,表示大于等于500并且小于等于1000元&#10;【注意:请使用英文模式下的符号】">
    	<input class="" type="text" id="jine_like" name="jine_like" value="${xmtjPage.jine_like}" placeholder="~ 例如:>=500,<=1000 ~" />
    </td>
    
    说明: &#10; 	 :就是一个回车换行的制表符。
    	  placeholder:就是html等文件中的输入框(如input)值为空的时候的默认显示,注意,这只是显示,当鼠标键入的时候,该提示会消失。
    

    2,java控制代码

    @RequestMapping("/queryXmZctjList")
    public String queryXmZctjList(Model modelXmtjPage xmtjPage) {
    	String jine_like_demo = xmtjPage.getJine_like();
    	if(checkNumber(xmtjPage.getJine_like())){//校验查询条件的金额是否合法
    		String dmeo1 = xmtjPage.getJine_like();
    		if(null!=dmeo1  &&dmeo1.indexOf(",") != -1){
    			dmeo1 = dmeo1.replace(",", " and to_number(nvl(t.sjbxje,0)) ");
    			xmtjPage.setJine_like(dmeo1);
    		}
    	}else{
    		xmtjPage.setJine_like("");
    		model.addAttribute("errMes", "您输入的查询条件含有不允许的字符,请检查后重新操作");
    	}
    	List<ZctjEntity> zctjList = xmwhService.query(xmtjPage);
    	model.addAttribute("zctjList", zctjList);
    	xmtjPage.setJine_like(jine_like_demo);
    	return "/../../listZctj";
    }
    

    checkNumber( )方法:校验用户输入的 字符串是否合法
    说明:这个方法时很有必要的,可以检测并控制用户的输入,防止一些人输入一些非法字符导致系统报错,甚至SQL脚本注入等危险操作的发生(这也只是我临时写的,很有可能把控的不够严谨,不吝赐教!)。

    // 校验字符串是否合法
    public boolean checkNumber(String str) {
    	boolean bb = true;
    	if (null != str && !"".equals(str)) {
    		if (containsStr(str)) {
    			bb = false;
    		}
    		if (str.indexOf("《") != -1 || str.indexOf("》") != -1 || str.indexOf(",") != -1 || str.indexOf("。") != -1) {
    			bb = false;
    		}
    		if (null != str && str.indexOf(",") != -1) {
    			str = str.replace(",", " and sa.aass ");
    		}
    		try {
    			kkssqService.query("xmwh.queryResultByDual", str);// 测试是否可以通过sql语法校验
    		} catch (Exception e) {
    			bb = false;
    		}
    	}
    	return bb;
    }
    

    containsStr( )方法:检查是否包含英文字母

    //检查是否包含英文字母
    public boolean containsStr(String cardNum) {
    	String regex=".*[a-zA-Z]+.*";
        Matcher m=Pattern.compile(regex).matcher(cardNum);
        return m.matches();
    }
    

    3,xml中sql控制

    在xml(sql管理)里面,方法的合适位置写上java处理好的金额模糊查询的条件
    注意:这里必须使用 jinelikejine_like,而不能使用常用的 #jine_like# 来取值了,因为java后台传递过来的参数值中包含敏感字符。

    where 1=1
    <isNotEmpty prepend="and" property="jine_like">
    	(to_number(nvl(t.sjbxje,0)) $jine_like$ )
    </isNotEmpty>
    

    例如我们输入的是: >=300,<1500
    断点到这里的时候,我们看到了前端传递过来的值如下图:
    阿斯顿发生的发生地方
    然后,经过方法的合法性检查、处理后,得到如下参数:
    在这里插入图片描述

    这时候,我们看控制台打印出来的最终的执行sql的where条件那块代码是这样的:

    ....
    where 1 = 1 and (to_number(nvl(t.sjbxje, 0)) >= 300 and to_number(nvl(t.sjbxje, 0)) < 1500)
    

    现在我们回头看页面的话,页面的查询结果就是我们按照金额的范围来查询出的结果:
    在这里插入图片描述

  • 相关阅读:
    ASP.NET MVC 3 学习笔记系列之Music Store(1)
    sql 拆分 逗号 函数
    软件开发项目的人力资源管理 团队配置问题探讨
    从某失败项目中学到的经验教训
    需求为王
    信息系统项目管理师考试经验分享
    JSP中文乱码问题及编码知识详解
    详解java中instanceof各种的用法
    mvc开源项目
    asp.net服务组件自动事务处理
  • 原文地址:https://www.cnblogs.com/QQ826688096/p/10713376.html
Copyright © 2020-2023  润新知