ホームページ  >  に質問  >  本文

java - 复杂的字段条件判断解析

应用场景简化描述

现在有个用户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的条件,表示要过滤出

的所有用户。

其中,oper可取的值有 = , < , > , >= , <= , in , between

如果oper为inbetween, 则阈值为多个,用逗号隔开。

问题

现在,对于不同的字段,在条件表condition里都是varchar类型,而在person表中,却有不同的类型。

而且,条件表里的条件是从web系统页面上,由用户配置的;也就是说,条件的个数不确定,配置的字段,运算符,阈值也都是不确定的。

问: 如何才能使用java代码,先将所有用户以及条件查出来,然后遍历每个用户,对于每个用户,遍历每个条件,怎样才能正确的判断该用户通过所有的条件检查,得出通过条件筛选的用户列表?(上边的场景是实际场景简化后的,请不要给出拼接sql,通过sql过滤的答案)


是不是可以把person的记录生成xml文件,条件生成xsd文件,用xsd去校验xml ??

PHPzPHPz2743日前497

全員に返信(3)返信します

  • 高洛峰

    高洛峰2017-04-18 10:54:25

    SQL を使用しない場合は、責任連鎖モデルを使用してすべてのデータを取得し、それをリンクリストに入れることを検討できます。
    次に、コレクション内のコンテンツをフィルターするフィルターを作成します。各条件は と同等になります。フィルター

    返事
    0
  • 怪我咯

    怪我咯2017-04-18 10:54:25

    ユーザーテーブルの大きさをすべて調べてください。

    正式な方法はSQLを使用して確認することです。 。 。

    より高度なアプローチは、ドメイン固有の言語をカスタマイズしてから SQL に変換することです。いずれにせよ、XML フィルタリングを使用することは不可能です。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 10:54:25

    条件テーブル はほとんど役に立たないような気がしますが?データを保存するだけですか? json を使用して一時的に渡すことができれば、それを永続的に保存したい場合は、少なくとも admin_id などのフィルタリングをマークするものを用意する必要があります。という条件が使われます。 redis に直接投げるよりも効率的ではないと感じます。 condition表没什么用啊?仅仅是存储数据?如果临时的直接用json传过来就好了,如果你要持久存储的话,起码要个admin_id什么的,来标记下是谁的筛选条件。感觉效率不如直接扔到redis好点。

    看你用的是Java,不过我习惯用PHP,就用PHP简单描述下我的思路吧...

    写一个Filter类处理condition转换为sql

    Java を使用しているようですが、私は PHP の使用に慣れているので、PHP を使用したアイデアを簡単に説明します...

    condition から sql への変換を処理する Filter クラス を作成します。 🎜 リーリー 🎜手書きなので文法上の間違いは無視してください...🎜

    返事
    0
  • キャンセル返事