Как я могу сделать отображение параметров iBatis для запроса с несколькими сериями различных параметров? - PullRequest
0 голосов
/ 19 сентября 2011

Мне нужно отобразить SQL-оператор этой общей формы:

SELECT ... 
FROM x, y, z
WHERE ( x.id = #x1# OR x.id = #x2# OR ... ) 
  AND ( y.id = #y1# OR y.id = #y2# OR ... )
  AND z.name = #name#;

Итак, у меня есть два списка параметров и 1 строка. Мне интересно, можно ли что-то сделать из динамического SQL iBatis или чего-то еще. Если бы я только мог построить свое собственное предложение WHERE и дать его, возможно. Потому что почему-то я хочу использовать iBatis для отображения результата в объекты Java ...

Как бы вы поступили?

Ответы [ 3 ]

0 голосов
/ 19 сентября 2011

Ваша проблема связана с тем, что вы создали запрос в вашем файле конфигурации iBatis (или myBatis).

Вместо строки or условий, почему бы не использовать одно in условие.

Вот пример:

SELECT ... 
FROM x, y, z
WHERE ( x.id in (#xstring# ) 
  AND ( y.id in (#ystring# )
  AND z.name = #name#;
0 голосов
/ 12 октября 2011

Элемент foreach (доступный только в ibatis3 - mybatis) является очень мощным и позволяет указывать коллекцию, объявлять переменные элемента и индекса, которые могут использоваться внутри тела элемента.Это также позволяет вам указывать открывающую и закрывающую строки и добавлять разделитель для размещения между итерациями.Элемент умный в том смысле, что он не будет случайно добавлять дополнительные разделители.

0 голосов
/ 19 сентября 2011

Вы можете использовать тег <iterate> для перебора списка параметров.Я подозреваю, что у вас есть 2 списка, один из которых содержит имена параметров, а другой содержит значение параметра.Так ли это?

Если это так: чтобы построить запрос из этого, вам придется выполнять итерации обоих списков одновременно, что невозможно в iBatis.Вместо этого вам нужно будет создать класс, содержащий как имя, так и значение, и передать его список.Затем вы можете использовать iBatis для перебора этого (единственного) списка и доступа к имени и значению, используя «текущий» элемент из списка.Попробуйте использовать этот подход, я успешно использовал его в прошлом.Я постараюсь найти для вас исходный код, как только я дома.

РЕДАКТИРОВАТЬ: Хорошо, кажется, вы хотите сгенерировать два блока, которые имеют много условий OR.В этом случае вы можете использовать 2 <iterate> тегов один за другим.Вам нужна помощь в передаче нескольких параметров в запрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...