现在有个用户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 ??
Si vous n'utilisez pas SQL, vous pouvez envisager d'utiliser le modèle de chaîne de responsabilité pour obtenir toutes les données et les mettre dans la liste chaînée
Écrivez ensuite un filtre pour filtrer le contenu de la collection. être équivalent à un filtre
Quelle est la taille de votre table d'utilisateurs ? Découvrez tout cela.
La méthode formelle consiste à utiliser SQL pour vérifier. . .
Une approche plus avancée devrait consister à personnaliser le langage spécifique au domaine, puis à le convertir en SQL. De toute façon, il est impossible d'utiliser le filtrage XML.
J'ai l'impression que ton
condition表
ne sert à rien ? Juste stocker des données ? Ce serait mieux si vous pouviez utiliserjson
pour le transmettre temporairement. Si vous souhaitez le stocker de manière persistante, vous devriez au moins avoir unadmin_id
ou quelque chose pour marquer les conditions de filtrage utilisées. Cela semble moins efficace que de le jeter directement dansredis
.Écrivez un
Filter类
pour gérer la conversion decondition
ensql
.Manuscrit, veuillez ignorer les erreurs grammaticales...