为了账号安全,请及时绑定邮箱和手机立即绑定

复杂的字段条件判断解析

复杂的字段条件判断解析

慕丝7291255 2019-03-01 11:16:07
应用场景简化描述 现在有个用户Person,包含int age, BigDecimal money,java.util.Date accessTime等字段,对应于用户表person: 年龄(age : int) 资产 (money : number) 入网日期 (accessTime : date) 20 100.00 2017-03-24 20 150.00 2016-05-07 21 300.00 2015-04-03 21 240.00 2015-07-15 22 300.00 2014-12-21 21 300.00 2014-12-21 另外,有一张条件表,condition: 字段名(fieldName : varchar) 运算符(oper : varchar) 阈值 (threshold : varchar ) age = 21 money > 280.05 accessTime > 2015-05-31 条件表condition用来配置过滤用户person的条件,表示要过滤出 年龄等于21岁 资产大于280.05 入网日期在 2015-06-01之后 的所有用户。 其中,oper可取的值有 = , < , > , >= , <= , in , between 如果oper为in或between, 则阈值为多个,用逗号隔开。 问题 现在,对于不同的字段,在条件表condition里都是varchar类型,而在person表中,却有不同的类型。 而且,条件表里的条件是从web系统页面上,由用户配置的;也就是说,条件的个数不确定,配置的字段,运算符,阈值也都是不确定的。 问: 如何才能使用java代码,先将所有用户以及条件查出来,然后遍历每个用户,对于每个用户,遍历每个条件,怎样才能正确的判断该用户通过所有的条件检查,得出通过条件筛选的用户列表?(上边的场景是实际场景简化后的,请不要给出拼接sql,通过sql过滤的答案) 是不是可以把person的记录生成xml文件,条件生成xsd文件,用xsd去校验xml ??
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

如果不用sql的话,可以考虑使用责任链模式,将所有数据获取出来放到linkedlist里面,
然后写个过滤器来过滤集合里面的内容,每一个条件可以相当于一个过滤器

查看完整回答
反对 回复 2019-03-01
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

你用户表有多大,还全部查出来。

正规做法都是拼sql查吧。。。

更高级的做法应该是自定义领域特定语言,然后转sql吧,反正不可能是用xml过滤。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 425 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信