Mybatis-- 初步瞭解Example類

1. 什麼是example類

Example類指定如何構建一個動態的where子句. 表中的每個non-BLOB列可以被包括在where子句中. 例子是展示此類用法的最好方式.

Example類可以用來生成一個幾乎無限的where子句.

Example類包含一個內部靜態類 Criteria 包含一個用 anded 組合在where子句中的條件列表. Example類包含一個 List 屬性,所有內部類Criteria中的子句會用 ored組合在一起. 使用不同屬性的 Criteria 類允許您生成無限類型的where子句.

創建 Criteria 對象 可以使用Example類中的 createCriteria() 或者 or() . 如果 Criteria 對象是用 createCriteria() 創建的,它會自動爲 List 屬性添加一個 Criteria 對象 - 這使得它更容易寫一個簡單的where子句, 如果您不需要 or 或者其他幾個子句組合的話. 用 or(Criteria criteria) 方法創建 Criteria 對象, 方法裏的 criteria 對象會被添加進 Criteria 對象的列表中.

重要 我們推薦您只使用 or() 方法創建 Criteria 對象. 我們相信這種方法使代碼更有可讀性.

2. Criterion

Criterion是最基本、最底層的Where條件,用於字段級的篩選,field用於指代字段名字

列舉如下:

只有一個條件,不需要其他參考值
field IS NULL
field IS NOT NULL

與一個參考值進行算數運算
field > value
field >= value
field = value
field <> value
field <= value
field < value

與一個參考值進行模糊查詢,參值中的%,?只能在構造查詢條件時手動指定。

field LIKE value
field NOT LIKE value

介於兩個參考值之間

field BETWEEN value AND secondValue

在或不在一個參考值集合中,item來自於value集合

field IN (item, item, item,…)
field NOT IN (item, item, item, …)

MyBatis Generator會爲每個字段產生如上的Criterion,如果表的字段比較多,產生的Example類會十分龐大。理論上通過Example類可以構造你想到的任何篩選條件。

3. Criteria

包含一個Cretiron的集合,每一個Criteria對象內包含的Cretiron之間是由AND連接的,是邏輯與的關係。

4. oredCriteria

Example內有一個成員叫oredCriteria,是Criteria的集合,就想其名字所預示的一樣,這個集合中的Criteria是由OR連接的,是邏輯或關係。oredCriteria就是ORed Criteria。

or()方法,會產生一個新的Criteria對象,添加到oredCriteria中,並返回這個Criteria對象,從而可以鏈式表達,爲其添加Criterion。

查詢條件1:a=? and (b=? or c=?) 不支持

查詢條件2:(a=? and b=?) or (a=? and c=?) 支持

5. 用法
  • 用生成後的Example類去生成一個簡單的where子句:
TestTableExample example = new TestTableExample();
example.createCriteria().andField1EqualTo(5);   

TestTableExample example = new TestTableExample();
example.or().andField1EqualTo(5); 

在上面的例子中, 動態生成的where子句是:

where field1 = 5

  • 用生成後的Example類去生成一個複雜的where子句
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);

在上面的例子中, 動態生成的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) 
發佈了22 篇原創文章 · 獲贊 22 · 訪問量 1250
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章