午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

java - 復(fù)雜的字段條件判斷解析

瀏覽:219日期:2024-01-13 11:54:15

問題描述

應(yīng)用場景簡化描述

現(xiàn)在有個用戶Person,包含int age, BigDecimal money,java.util.Date accessTime等字段,對應(yīng)于用戶表person:

年齡(age : int)資產(chǎn) (money : number)入網(wǎng)日期 (accessTime : date)20100.002017-03-2420150.002016-05-0721300.002015-04-0321240.002015-07-1522300.002014-12-2121300.002014-12-21

另外,有一張條件表,condition:

字段名(fieldName : varchar)運算符(oper : varchar)閾值 (threshold : varchar )age=21money>280.05accessTime>2015-05-31

條件表condition用來配置過濾用戶person的條件,表示要過濾出

年齡等于21歲

資產(chǎn)大于280.05

入網(wǎng)日期在 2015-06-01之后

的所有用戶。

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

如果oper為in或between, 則閾值為多個,用逗號隔開。

問題

現(xiàn)在,對于不同的字段,在條件表condition里都是varchar類型,而在person表中,卻有不同的類型。

而且,條件表里的條件是從web系統(tǒng)頁面上,由用戶配置的;也就是說,條件的個數(shù)不確定,配置的字段,運算符,閾值也都是不確定的。

問: 如何才能使用java代碼,先將所有用戶以及條件查出來,然后遍歷每個用戶,對于每個用戶,遍歷每個條件,怎樣才能正確的判斷該用戶通過所有的條件檢查,得出通過條件篩選的用戶列表?(上邊的場景是實際場景簡化后的,請不要給出拼接sql,通過sql過濾的答案)

是不是可以把person的記錄生成xml文件,條件生成xsd文件,用xsd去校驗xml ??

問題解答

回答1:

如果不用sql的話,可以考慮使用責(zé)任鏈模式,將所有數(shù)據(jù)獲取出來放到linkedlist里面,然后寫個過濾器來過濾集合里面的內(nèi)容,每一個條件可以相當于一個過濾器

回答2:

你用戶表有多大,還全部查出來。

正規(guī)做法都是拼sql查吧。。。

更高級的做法應(yīng)該是自定義領(lǐng)域特定語言,然后轉(zhuǎn)sql吧,反正不可能是用xml過濾。

回答3:

感覺你這個condition表沒什么用啊?僅僅是存儲數(shù)據(jù)?如果臨時的直接用json傳過來就好了,如果你要持久存儲的話,起碼要個admin_id什么的,來標記下是誰的篩選條件。感覺效率不如直接扔到redis好點。

看你用的是Java,不過我習(xí)慣用PHP,就用PHP簡單描述下我的思路吧...

寫一個Filter類處理condition轉(zhuǎn)換為sql。

class Filter { public function doFilter() {//1. 獲取登錄的admin_id//2. 獲取篩選條件/** * 數(shù)據(jù)格式例子為: [ * ’field’ => ’age’;, * ’type’ => ’compare’, * ’ext’ => ’>’, * ’value’ => ’2’ * ] */foreach($conditions as $condition) { // 根據(jù)type獲取對應(yīng)的$conditionHandle $conditionHandle::parse($condition);} }}// Condition接口interface Condition { // 解析數(shù)據(jù),返回sql片段和需要填充的數(shù)據(jù)(此處使用PDO預(yù)處理,減少SQL注入) static function parse($data);}// ConditionHandlenamespace Condition;class Compare implements Condition { // 執(zhí)行流程 public static function parse($data) {...return [ ’sql’ => ’age > ?’, ’params’ => [ 2 ]]; }}

手寫的,語法錯誤請忽略...

標簽: java
相關(guān)文章:
主站蜘蛛池模板: 日韩欧美中文字幕在线视频 | 亚洲国产中文字幕 | 亚洲美女久久久 | 免费看黄色一级视频 | 欧美另类第一页 | 91最新地址永久入口 | 精品久久网站 | 日韩综合图区 | 久久久久女教师免费一区 | 亚洲一区二区三区三州 | 欧美成人做爰大片免费看黄石 | 视频免费在线 | 成年人黄网站 | 欧美无砖区 | 亚洲黄色网址 | 亚洲欧美日本在线观看 | 成人在线观看黄色 | 热99在线观看 | 亚洲69av | 国产成人免费在线观看视频 | 成人91看片 | 91传媒在线免费观看 | 一级片在线免费观看 | av狠狠操| 黄网在线视频 | 三级黄毛片 | 亚洲精品1区2区 | 日本www色| 黑人啪啪 | 国产主播精品 | 国产视频在线一区 | 1024国产 | 午夜视频在线免费播放 | 97视频| 六月丁香综合 | 亚洲激情自拍 | 亚洲精品久久久久avwww潮水 | 青青在线视频 | 久久久久久一级片 | 99视频一区| 久久久久久影视 |