我想用MyBatis创建一个查询,它会生成如下内容:
SELECT first_field, second_filed, third_field
WHERE first_field > 1 AND (second_field > 0 OR third_field < 0)
我如何使用Criteria对象构建它?
答案 0 :(得分:7)
执行此操作的一种方法是extend the generated Example classes:
生成的&#34;示例&#34; class包含一个嵌套的内部类,其中存在谓词的实际功能。此内部类始终命名为GeneratedCriteria。
MBG还会生成一个名为Criteria的内部类,它扩展了GeneratedCriteria,您可以使用它来将自己的函数添加到示例类中。 Eclipse Java代码合并 Criteria类不会被删除,因此您可以添加它,而不必担心在重新生成时丢失您的更改。
基本上,生成示例类,并添加自定义条件。
public Criteria multiColumnOrClause(String value1, String value2) {
addCriterion("value1 = " + value1 + " OR value2 = " + value2);
return this;
}
如果您经常重复使用它,并且不想为所有映射器执行此操作,您也可以在&#34;插件&#34;中提取逻辑,尽管文档有点缺乏,这里只有一个例子:
答案 1 :(得分:5)
由于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));
然后坐下来让SQL优化器搞清楚。
答案 2 :(得分:0)
据我所知,使用标准生成的映射器是不可能的。