я использую 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
Что может быть причиной этой проблемы?
Обновлено: Не просите меня обновить или использовать другую зависимость, потому что это невозможно из-за ограничений программного обеспечения!
Не дубликат, пожалуйста, прочитайте весь вопрос. Я знаю, что foreach не поддерживается. <iterate> упрощен (опущены open, close и соединение)
@dbl я сделал это, как в вопросе, упомянутом выше, и он возвращает ошибку!
Я никогда не пользовался iBatis и поэтому никогда не читал к нему документацию... Указал на эту ветку с намерением помочь вам... Извините, если она оказалась вам бесполезной...
Вместо этого рассмотрите возможность перехода на MyBatis (MyBatis является преемником iBatis). Кроме того, погуглив, вы все еще можете найти документацию по iBatis 2, например, на ibatis.apache.org/docs/java.
@MarkRotteveel прочитал весь вопрос. Я специально написал: не просите меня обновить или использовать другую зависимость, потому что это невозможно из-за ограничений программного обеспечения!
Для меня это звучит как искусственное ограничение, и если у вас есть для этого достаточные основания, все может измениться.




На самом деле вы правы, у вас просто есть одна небольшая опечатка в вашем коде. Удалите property = "insert" в своем заявлении <iterate>:
<select parameterClass = "ArrayList">
select * from something
where str IN
<iterate>
#[].firstStr$, #[].secondStr#
</iterate>
</select>
Возможный дубликат Поддерживает ли iBATIS 2.3.x тег foreach?