现在有个用户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 ??
Jika anda tidak menggunakan SQL, anda boleh mempertimbangkan untuk menggunakan model rantaian tanggungjawab untuk mendapatkan semua data dan meletakkannya dalam senarai pautan
Kemudian tulis penapis untuk menapis kandungan dalam koleksi bersamaan dengan penapis
Berapa besarkah jadual pengguna anda.
Kaedah formal ialah menggunakan sql untuk menyemak. . .
Pendekatan yang lebih maju adalah untuk menyesuaikan bahasa khusus domain dan kemudian menukarnya kepada sql. Tidak mustahil untuk menggunakan penapisan xml.
Saya rasa
condition表
anda tidak berguna? Simpan data sahaja? Adalah lebih baik jika anda boleh menggunakanjson
untuk menyerahkannya buat sementara. Jika anda ingin menyimpannya secara berterusan, anda sekurang-kurangnya mempunyaiadmin_id
atau sesuatu untuk menandakan keadaan penapisan yang digunakan. Rasanya kurang cekap berbanding membuangnya terus ke dalamredis
.Tulis
Filter类
untuk mengendalikan penukarancondition
kepadasql
.Tulisan tangan, sila abaikan kesalahan tatabahasa...