Example類(lèi)
Example類(lèi)指定如何構(gòu)建一個(gè)動(dòng)態(tài)的where子句. 表中的每個(gè)non-BLOB列可以被包括在where子句中. 例子是展示此類(lèi)用法的最好方式.
Example類(lèi)可以用來(lái)生成一個(gè)幾乎無(wú)限的where子句.
Example類(lèi)包含一個(gè)內(nèi)部靜態(tài)類(lèi) Criteria 包含一個(gè)用 anded 組合在where子句中的條件列表. Example類(lèi)包含一個(gè) List 屬性,所有內(nèi)部類(lèi)Criteria中的子句會(huì)用 ored組合在一起. 使用不同屬性的 Criteria 類(lèi)允許您生成無(wú)限類(lèi)型的where子句.
創(chuàng)建 Criteria 對(duì)象 可以使用Example類(lèi)中的 createCriteria() 或者 or() . 如果 Criteria 對(duì)象是用 createCriteria() 創(chuàng)建的捕犬,它會(huì)自動(dòng)為 List 屬性添加一個(gè) Criteria 對(duì)象 - 這使得它更容易寫(xiě)一個(gè)簡(jiǎn)單的where子句级零, 如果您不需要 or 或者其他幾個(gè)子句組合的話. 用 or(Criteria criteria) 方法創(chuàng)建 Criteria 對(duì)象, 方法里的 criteria 對(duì)象會(huì)被添加進(jìn) Criteria 對(duì)象的列表中.
重要 我們推薦您只使用 or() 方法創(chuàng)建 Criteria 對(duì)象. 我們相信這種方法使代碼更有可讀性.
用法
簡(jiǎn)單查詢
這個(gè)例子展示了如何用生成后的Example類(lèi)去生成一個(gè)簡(jiǎn)單的where子句:
TestTableExample example = new TestTableExample();
example.createCriteria().andField1EqualTo(5);
作為另一種選擇, 下面的方式也是可以的:
TestTableExample example = new TestTableExample();
example.or().andField1EqualTo(5);
在上面的例子中, 動(dòng)態(tài)生成的where子句是:
where field1 = 5
下面的例子展示了如何用生成后的Example類(lèi)去生成一個(gè)復(fù)雜的where子句 (用到了 JSE 5.0 的泛型):
TestTableExample example = new TestTableExample();
example.or()
.andField1EqualTo(5)
.andField2IsNull();
example.or()
.andField3NotEqualTo(9)
.andField4IsNotNull();
List field5Values = new ArrayList();
field5Values.add(8);
field5Values.add(11);
field5Values.add(14);
field5Values.add(22);
example.or()
.andField5In(field5Values);
example.or()
.andField6Between(3, 7);
在上面的例子中, 動(dòng)態(tài)生成的where子句是:
where (field1 = 5 and field2 is null)
or (field3 <> 9 and field4 is not null)
or (field5 in (8, 11, 14, 22))
or (field6 between 3 and 7)
將會(huì)返回滿足這些條件的記錄結(jié)果.
去重復(fù)查詢
您可以在所有的Example類(lèi)中調(diào)用 setDistinct(true) 方法進(jìn)行強(qiáng)制去重復(fù)查詢.
Criteria類(lèi)
Criteria 內(nèi)部類(lèi)的每個(gè)屬性都包含 andXXX 方法,以及如下的標(biāo)準(zhǔn)的SQL查詢方法:
IS NULL - 指相關(guān)的列必須為NULL
IS NOT NULL - 指相關(guān)的列必須不為NULL
= (equal) - 指相關(guān)的列必須等于方法參數(shù)中的值
<> (not equal) - 指相關(guān)的列必須不等于方法參數(shù)中的值
(greater than) - 指相關(guān)的列必須大于方法參數(shù)中的值
= (greater than or equal) - 指相關(guān)的列必須大于等于方法參數(shù)中的值
< (less than) - 指相關(guān)的列必須小于于方法參數(shù)中的值
<= (less than or equal) - 指相關(guān)的列必須小于等于方法參數(shù)中的值
LIKE - 指相關(guān)的列必須 “l(fā)ike” 方法參數(shù)中的值. 這個(gè)方法不用必須加入 ‘%’, 您必須設(shè)置方法參數(shù)中的值.
NOT LIKE - 指相關(guān)的列必須 “not like” 方法參數(shù)中的值. 這個(gè)方法不用必須加入 ‘%’, 您必須設(shè)置方法參數(shù)中的值.
BETWEEN - 指相關(guān)的列必須在 “between” 方法參數(shù)中的兩個(gè)值之間.
NOT BETWEEN - 指相關(guān)的列必須不在 “not between” 方法參數(shù)中的兩個(gè)值之間.
IN - 指相關(guān)的列必須在傳入的方法參數(shù)的list中.
NOT IN - 指相關(guān)的列必須不在傳入的方法參數(shù)的list中.