MyBatis"或"标准

时间:2014-10-22 09:20:58

标签: java mybatis

我想用MyBatis创建一个查询,它会生成如下内容:

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

我如何使用Criteria对象构建它?

3 个答案:

答案 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;中提取逻辑,尽管文档有点缺乏,这里只有一个例子:

org.mybatis.generator.plugins.CaseInsensitiveLikePlugin

答案 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)

据我所知,使用标准生成的映射器是不可能的。