我想用MyBatis创建一个查询,它将产生如下内容:
SELECT first_field, second_filed, third_field
WHERE first_field > 1 AND (second_field > 0 OR third_field < 0)
Run Code Online (Sandbox Code Playgroud)
我怎么能用Criteria对象构造它?
一种方法是扩展生成的Example类:
生成的"example"类包括嵌套的内部类,其中存在谓词的实际功能.此内部类始终命名为GeneratedCriteria.
MBG还生成一个名为Criteria的内部类,它扩展了GeneratedCriteria,您可以使用它来将自己的函数添加到示例类中.Eclipse Java代码合并不会删除Criteria类,因此您可以添加它,而不必担心在重新生成时丢失更改.
所以基本上,生成您的示例类,并添加您的自定义条件.
public Criteria multiColumnOrClause(String value1, String value2) {
addCriterion("value1 = " + value1 + " OR value2 = " + value2);
return this;
}
Run Code Online (Sandbox Code Playgroud)
如果您经常重复使用它,并且不想为所有映射器执行此操作,您也可以在"插件"中提取逻辑,尽管文档有点缺乏,但只有一个示例:
org.mybatis.generator.plugins.CaseInsensitiveLikePlugin
既然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));
Run Code Online (Sandbox Code Playgroud)
然后坐下来让SQL优化器搞清楚.
| 归档时间: |
|
| 查看次数: |
11234 次 |
| 最近记录: |