Как использовать аннотации с iBatis (myBatis ) для запроса IN?

Мы хотели бы использовать только аннотации с MyBatis, мы действительно стараемся избегать xml. Мы пытаемся использовать предложение «IN»:

@Select("SELECT * FROM blog WHERE id IN (#{ids})") 
List<Blog> selectBlogs(int[] ids); 

Кажется, что MyBatis не может выбрать массив целых и вставить их в результирующий запрос. похоже, «мягко терпит неудачу», и мы не получаем результатов обратно.

Похоже, что мы могли бы сделать это, используя сопоставления XML, но мы действительно хотели бы избежать этого. Есть ли правильный синтаксис аннотации для этого?

28
задан dirtyvagabond 9 August 2010 в 15:23
поделиться

1 ответ

Я считаю, что это нюанс подготовленных операторов jdbc, а не MyBatis. Здесь есть ссылка , которая объясняет эту проблему и предлагает различные решения. К сожалению, ни одно из этих решений не является жизнеспособным для вашего приложения, однако его все еще полезно прочитать, чтобы понять ограничения подготовленных операторов в отношении предложения «IN». Решение (возможно, неоптимальное) можно найти с точки зрения специфики БД. Например, в postgresql можно использовать:

"SELECT * FROM blog WHERE id=ANY(#{blogIds}::int[])"

«ANY» - это то же самое, что «IN», а «:: int []» - это тип, приводящий аргумент к массиву целых чисел. Аргумент, который вводится в оператор, должен выглядеть примерно так:

"{1,2,3,4}"
22
ответ дан 28 November 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: