2014-10-22 48 views
4

我想創建一個MyBatis的查詢,這將產生類似:MyBatis的「或」標準

SELECT first_field, second_filed, third_field 
WHERE first_field > 1 AND (second_field > 0 OR third_field < 0) 

我怎麼能構建與標準的對象?

回答

4

一種方式將是對extend the generated Example classes

所生成的「實例」類包括其中謂詞的實際功能存在嵌套內部類。這個內部類總是被命名爲GeneratedCriteria。

MBG還生成一個名爲Criteria的內部類,該類擴展了GeneratedCriteria,您可以使用它將自己的函數添加到示例類中。 Eclipse Java代碼合併器不會刪除Criteria類,因此您可以添加它,而不必擔心在更新時丟失更改。

所以基本上,生成您的示例類,並添加您的自定義條件。

public Criteria multiColumnOrClause(String value1, String value2) { 
     addCriterion("value1 = " + value1 + " OR value2 = " + value2); 
     return this; 
    } 

如果你重用它的時候,又不想爲所有的映射器做到這一點,你也可以提取邏輯的「插件」,雖然文件是缺乏對這個有點,有僅是一個例子:

org.mybatis.generator.plugins.CaseInsensitiveLikePlugin

0

據我現在瞭解,不可能用標準生成的mapper來做到這一點。要做到這一點

4

由於a AND (b OR c)相同(a AND b) or (a AND c)

TestTableExample example = new TestTableExample(); 
example.createCriteria() 
    .andField1GreaterThan(1) 
    .andField2GreaterThan(0); 
example.or(example.createCriteria() 
    .andField1GreaterThan(1) 
    .andField3LessThan(0)); 

然後坐下來讓SQ L優化器找出它。