Я сложен.Я хотел бы заменить прямое использование sql в пользу mybatis faramework .Я хотел бы выбрать список счетов с заполненной картой свойств.
Но давайте начнем с самого начала, первый класс Account
public class Account {
private int id;
...
private Map<String, String> properties;
...
//setters / getters
}
Интерфейс Mapper для Account очевиден, а файл отображения содержит селекторы
<select id="getAccountById" resultMap="account">
select ... from account where id = #{id}
</select>
<select id="getAccountProperties" resultType=map>
select * from properties where id=#{id}
</select>
Первый выбор возвращает объект Account, второй java.util.Map содержит имя столбца / значение пара.
Мне бы хотелось, чтобы каждый объект учетной записи содержал карту со свойствами, поэтому я перебираю списокучетные записи и выбирает свои свойства по идентификатору
for(Account account : accountList) {
int id = account.getId();
Map properites = mapper.getAccountProperties(id);
account.setProperties(properties);
}
И в основном это работает, но для 200 учетных записей это занимает около 2 минут, и это не приемлемо.
Я надеюсь, что использование resultMap
с collection
ускорит его.Но вопрос в том, как это сделать.Как должно выглядеть resultMap="account"
<resultMap id="account" type="Account">
<id property="id" column="id">
...
<collection property="properties" javaType="map" column="id" select="getAccountProperties" />
</resultMap>
В этом случае выбранный объект учетной записи не содержит никаких свойств.Большой вопрос: как связать свойства с объектом аккаунта?