使用OQL「語言」構造ORM實體類的複雜查詢條件

2021-09-08 23:15:43 字數 1891 閱讀 8813

oql」語言「 是pdf.net資料開發框架的實體物件查詢語言,一直以來,orm的複雜查詢條件都是困擾orm的問題,所以很多時候不得不捨棄orm,直接手工拼接sql。我們來看看oql是怎麼解決這些問題的,現在舉乙個今天同事遇到的問題:

有這樣乙個實體類 myentity,實體類的具體定義在此忽略,有興趣的朋友請看我的部落格。

myentity e

=new

myentity();

e.f1="

1";e.f2="

2";e.f3="

a";//

其它可選值 a,b,c.....

e.f5="

a";//

其它可選值 a,b,c....

必要條件 f1 and f2,可選條件 f3,f4,f5,準備輸出下面類似的sql語句:

select

*from

table1 

where

(f1='1

'andf2=

'2')

and(f3='

a'orf3='

b'orf3='

c')and

(f5='a

'orf5=

'b'or

f5='c

')下面我們來看看怎麼使用oql來構造這個sql語句,

oqlcompare cmp 

=new

oqlcompare(e);

oqlcompare cmpcondtion1

=cmp.compare(e.f1) 

&cmp.compare(e.f2);

//等於實體類屬性值的比較可以直接這樣寫 cmp.compare(e.f2)

oqlcompare cmpresult

=null;//

處理欄位f3的條件

string

valuef3=;

//具體獲取條件值的過程此略,用乙個陣列代替。

oqlcompare cmpcondtionf3

=null;if

(valuef3.length

>0)

cmpresult

=cmpcondtion1 

&cmpcondtionf3;}//

處理欄位f5的條件

string

valuef5=;

oqlcompare cmpcondtionf5

=null;if

(valuef5.length

>0)

cmpresult

=cmpcondtion1 

&cmpcondtionf5;}

現在我們構造成功了條件物件 cmpresult,接下來看看怎麼樣構造完整的oql語句:

//e 是前面的實體類物件例項

oql q

=oql.from(e).select().where(cmpresult).end;

當然也可以這樣寫,但沒有上面簡單:

oql q

=new

oql(e);

q.select().where(cmpresult);

如果只想查詢f1,f2屬性的值,這樣寫:

oql q

=new

oql(e);

q.select(e.f1,e.f2).where(cmpresult);

最後就可以到資料庫查詢實體了,非常簡單:

list

<

myentity

>

result

=entityquery

<

myentity

>

.querylist(q);

至此,乙個複雜的orm查詢使用oql語言就完成了,是否方便,還得大家評說。

pdf.net官網:

異常處理,使用實體類

異常處理機制的作用 加強程式的健壯性。使得應用系統在執行時發生錯誤後,不論這種錯誤是由哪種原因引起的。通過程式對預知錯誤的處理或clr 內部的處理,達到讓程式可以恢復執行的效果。exception 類是所有異常類的基類,所有的異常都是其子類的物件,該類封裝的異常處理有 2中情況 類 2 由公共語言執...

mybatis plus實體類註解使用

mybatis plus 簡稱 mp 是乙個 mybatis 的增強工具,在 mybatis 的基礎上只做增強不做改變,為簡化開發 提高效率而生。tableid value id type idtype.auto 自增 tableid value id type idtype.id worker s...

實現ORM模型一鍵生成實體類

使用方法 配置resources generactor.properties檔案 在com.dgy.main中執行main方法 主要的方法 取得mysql資料庫的表的字段資訊 查詢乙個表的所有列資訊 param tablename return public static mapgetcloumin...