Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MyBatis“;或;标准_Java_Mybatis - Fatal编程技术网

Java MyBatis“;或;标准

Java MyBatis“;或;标准,java,mybatis,Java,Mybatis,我想用MyBatis创建一个查询,它将生成如下内容: SELECT first_field, second_filed, third_field WHERE first_field > 1 AND (second_field > 0 OR third_field < 0) 选择第一个\u字段、第二个\u字段、第三个\u字段 其中第一个字段>1和(第二个字段>0或第三个字段

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

SELECT first_field, second_filed, third_field
WHERE first_field > 1 AND (second_field > 0 OR third_field < 0)
选择第一个\u字段、第二个\u字段、第三个\u字段
其中第一个字段>1和(第二个字段>0或第三个字段<0)

我如何用Criteria对象构造它?

据我现在所知,用标准生成的映射器不可能做到这一点。

一种方法是:

生成的“示例”类包括一个嵌套的内部类,其中存在谓词的实际功能。此内部类始终命名为GeneratedCriteria

MBG还生成一个名为Criteria的内部类,该类扩展了GeneratedCriteria,您可以使用它将自己的函数添加到示例类中EclipseJava代码合并不会删除Criteria类,因此您可以添加到其中,而不用担心在重新生成时丢失更改

因此,基本上,生成示例类,并添加自定义条件

    public Criteria multiColumnOrClause(String value1, String value2) {
        addCriterion("value1 = " + value1 + " OR value2 = " + value2);
        return this;
    }
如果您经常重复使用它,并且不想对所有的映射器都这样做,您也可以在“插件”中提取逻辑,尽管文档中对此有点缺乏,但只有一个示例:

因为
a和(b或c)
(a和b)或(a和c)


然后坐下来,让SQL优化器来解决这个问题。

注意:您还需要在多列or子句中添加括号。可能存在SQL注入的风险?技术上是的,这里的代码只是一个虚拟示例。在真实场景中,1/您可能不希望在查询构建级别处理清理,它应该在处理用户输入时提前完成,2/您可以使用更精确的类型(而不是字符串)
TestTableExample example = new TestTableExample();
example.createCriteria()
  .andField1GreaterThan(1)
  .andField2GreaterThan(0);
example.or(example.createCriteria()
  .andField1GreaterThan(1)
  .andField3LessThan(0));