gpt4 book ai didi

java - Ibatis/Ibator - 如何使用示例类和条件正确编写 "complex"WHERE 子句?

转载 作者:行者123 更新时间:2023-12-02 07:55:30 27 4
gpt4 key购买 nike

我想使用 Ibator 生成的示例类执行具有多个条件的 SELECT

如上所述here in the usage notes ,使用 criteria.andFieldIsSomething()example.or(example) 组成具有多个 OR 的 WHERE 子句相当容易AND 运算符。

我可以这样写:

example.createCriteria().andIntegerIsEqualTo(int).andDateIsEqualTo(someday);
example.or(example.createCriteria().andIntegerIsNull().andDateIsEqualTo(someday));
example.or(example.createCriteria().andIntegerIsEqualTo(int).andDateIsNull());
example.or(example.createCriteria().andIntegerIsNull().andDateIsNull());

但首先,它有点乏味和多余,它会输出以下代码:

SELECT * FROM zeTable
WHERE (integer = int AND date = someday)
OR (integer IS NULL AND date = someday)
OR (integer = int AND date IS NULL)
OR (integer IS NULL AND date IS NULL);

一种更优雅(并且可能更有效)的写作方式是:

SELECT * FROM zeTable
WHERE (integer IS NULL OR integer = int)
AND (date IS NULL OR date = someday);

NULL 的测试使我无法有效地使用 .andFieldSomethingIn(List value) 方法,虽然我保持这个示例简单,但我必须编写的代码意味着像这样跨越 5 或 6 个领域,这可能相当于 36 个不同的标准。

这对我来说似乎很荒谬,所以我认为一定有更好的方法。有人可以提出建议吗?

最佳答案

Tl;dr:这不可能吗?处理它。

我花了一些时间调查这个问题,这个问题在这里发布了一个多月了。看来 Ibator 的 Criteria 和 Example 类无法做到这一点。

我的猜测是,这不是为了这个。解决方法:如果您想要复杂的子句和效率,请在 SQL_MAP 中编写自己的逻辑。

这就是我最终所做的。如果其他人稍后可以提供更好的答案,我会接受。

关于java - Ibatis/Ibator - 如何使用示例类和条件正确编写 "complex"WHERE 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717130/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com