Печать массиваСписок объектов

я использую Ibatis 2, и я спрашиваю, как распечатать массив объектов (поскольку официальные документы ушли). Это пример данных, аналогичный тому, который у меня есть:

[
    {
        "firstStr": "D392",
        "secondStr": "N3895"
    },
    {
        "firstStr": "D624",
        "secondStr": "M2435"
    },
    {
        "firstStr": "T4543",
        "secondStr": "K9345"
    }
]

Эти данные определяются как ArrayList. Объекты внутри массива определяются как Map:

Map<String,String> data = new HashMap();
data.put("firstStr","D392");
data.put("secondStr","N3895");
...

ArrayList<Map> insert = new ArrayList<Map>();
insert.add(data);


Мне нужно отобразить эти данные в шаблоне sql с помощью <iterate> (потому что в моей версии foreach недоступен). Что у меня есть на данный момент:

<select parameterClass = "ArrayList">
    select * from something
    where str IN
    <iterate property = "insert">
        #[].firstStr$, #[].secondStr#
    </iterate>
</select>

Я получаю следующую ошибку:

String index out of range: -1

Что может быть причиной этой проблемы?

Обновлено: Не просите меня обновить или использовать другую зависимость, потому что это невозможно из-за ограничений программного обеспечения!

Возможный дубликат Поддерживает ли iBATIS 2.3.x тег foreach?

dbl 04.07.2019 15:17

Не дубликат, пожалуйста, прочитайте весь вопрос. Я знаю, что foreach не поддерживается. <iterate> упрощен (опущены open, close и соединение)

Matej J 04.07.2019 15:21

@dbl я сделал это, как в вопросе, упомянутом выше, и он возвращает ошибку!

Matej J 04.07.2019 15:23

Я никогда не пользовался iBatis и поэтому никогда не читал к нему документацию... Указал на эту ветку с намерением помочь вам... Извините, если она оказалась вам бесполезной...

dbl 04.07.2019 15:24

Вместо этого рассмотрите возможность перехода на MyBatis (MyBatis является преемником iBatis). Кроме того, погуглив, вы все еще можете найти документацию по iBatis 2, например, на ibatis.apache.org/docs/java.

Mark Rotteveel 06.07.2019 19:59

@MarkRotteveel прочитал весь вопрос. Я специально написал: не просите меня обновить или использовать другую зависимость, потому что это невозможно из-за ограничений программного обеспечения!

Matej J 07.07.2019 12:56

Для меня это звучит как искусственное ограничение, и если у вас есть для этого достаточные основания, все может измениться.

Mark Rotteveel 07.07.2019 17:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле вы правы, у вас просто есть одна небольшая опечатка в вашем коде. Удалите property = "insert" в своем заявлении <iterate>:

<select parameterClass = "ArrayList">
    select * from something
    where str IN
    <iterate>
        #[].firstStr$, #[].secondStr#
    </iterate>
</select>

Другие вопросы по теме