Как передать Integer Array в предложение IN в MyBatis
42099 просмотра
3 ответа
В моем Mybatis есть запрос, содержащий предложение IN, которое в основном представляет собой набор идентификаторов (целых чисел)
Теперь я застрял на том, как я могу передать массив Integer в это предложение IN, чтобы он собирал правильные записи. Попытался передать строку, содержащую идентификаторы, в предложение IN, но это не сработало, как ожидалось.
Пример кода ниже
Метод Mybatis с использованием аннотаций
@Select(SEL_QUERY)
@Results(value = {@Result(property="id",column="ID")})
List<Integer> getIds(@Param("usrIds") Integer[] usrIds);
запрос
select distinct ID from table a where a.id in ( #{usrIds} )
Вызов метода
Integer[] arr = new Integer[2];
arr[0] = 1;
arr[1] = 2;
mapper.getIds(arr)
Это не работает, Mybatis выдает ошибку, когда я вызываю метод mapper
Любые предложения, пожалуйста
Автор: Vivek Источник Размещён: 12.11.2019 09:10Ответы (3)
31 плюса
В руководстве пользователя myBatis по динамическому SQL есть пример того, как использовать цикл foreach для построения строки запроса, которая работает для списков и массивов.
До выпуска 3.2 для использования динамического sql приходилось использовать конфигурацию xml, а в более новых версиях также можно было использовать динамический sql в аннотациях .
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
Автор: Jörn Horstmann
Размещён: 06.01.2012 12:29
6 плюса
ДА, вы можете сделать это, используя аннотации.
Если вы используете postgresql , вы можете сделать как в этом посте .
Если вы используете MySQL, попробуйте внести следующие изменения в пример кода:
Метод Mybatis с использованием аннотаций
@Select(SEL_QUERY)
@Results(value = {@Result(property="id",column="ID")})
List<Integer> getIds(@Param("usrIds") String usrIds);
Запрос (с использованием MySQL)
select distinct ID from table a where FIND_IN_SET( a.id, #{usrIds}) <> 0
Вызов метода
Integer[] arr = new Integer[2];
arr[0] = 1;
arr[1] = 2;
String usrIds= "";
for (int id : ids) {
usrIds += id + ",";
}
mapper.getIds(usrIds)
Автор: Italo Borssatto
Размещён: 09.02.2012 04:40
0 плюса
Вы можете создать новый обработчик типов и использовать его только для вашего параметра. Запрос изменится на:
SELECT ... WHERE FIND_IN_SET(id, #{usrIds, typeHandler=my.pkg.ListTypeHandler}) <> 0
И обработчик типа:
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.ObjectTypeHandler;
import com.google.common.base.Joiner;
public class ListTypeHandler extends ObjectTypeHandler {
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
ps.setObject(i, Joiner.on(",").join((Iterable<?>) parameter), JdbcType.OTHER.TYPE_CODE);
}
}
Автор: Italo Borssatto
Размещён: 08.03.2019 07:33
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- java-ee Как бороться с ошибкой «java.lang.OutOfMemoryError: Java heap space»?
- java-ee Можете ли вы программно перезапустить приложение j2ee?
- java-ee Tomcat против Weblogic JNDI Поиск
- java-ee Получите доступ к значению Enum, используя EL с JSTL
- java-ee Сервлет для обслуживания статического контента
- java-ee Могу ли я подключиться к SQL Server с помощью аутентификации Windows из веб-приложения Java EE?
- mybatis MyBatis выполняет несколько SQL-операторов за один раз, это возможно?
- mybatis Как вернуть ключ после вставки, используя MyBatis, когда id / uuid as хранится в двоичном виде?
- mybatis Как я могу получить байт [] из столбца bytea с MyBatis?
- mybatis Как передать Integer Array в предложение IN в MyBatis
- mybatis Конфигурация Mybatis с typeAliases
- mybatis Получить идентификатор последней вставленной записи в mybatis