Мы хотели бы использовать только аннотации с MyBatis, мы действительно стараемся избегать xml. Мы пытаемся использовать предложение «IN»:
@Select("SELECT * FROM blog WHERE id IN (#{ids})")
List<Blog> selectBlogs(int[] ids);
Кажется, что MyBatis не может выбрать массив целых и вставить их в результирующий запрос. похоже, «мягко терпит неудачу», и мы не получаем результатов обратно.
Похоже, что мы могли бы сделать это, используя сопоставления XML, но мы действительно хотели бы избежать этого. Есть ли правильный синтаксис аннотации для этого?
Я считаю, что это нюанс подготовленных операторов jdbc, а не MyBatis. Здесь есть ссылка , которая объясняет эту проблему и предлагает различные решения. К сожалению, ни одно из этих решений не является жизнеспособным для вашего приложения, однако его все еще полезно прочитать, чтобы понять ограничения подготовленных операторов в отношении предложения «IN». Решение (возможно, неоптимальное) можно найти с точки зрения специфики БД. Например, в postgresql можно использовать:
"SELECT * FROM blog WHERE id=ANY(#{blogIds}::int[])"
«ANY» - это то же самое, что «IN», а «:: int []» - это тип, приводящий аргумент к массиву целых чисел. Аргумент, который вводится в оператор, должен выглядеть примерно так:
"{1,2,3,4}"