Java MyBatis“;或;标准
我想用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或第三个字段
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));