Ибатис - QueryforList - PullRequest
       4

Ибатис - QueryforList

0 голосов
/ 03 марта 2011

Привет Это может быть основной вопрос, но я новичок в Ibatis. queryForList будет возвращать список каких объектов? Обычно для queryForObject мы определяем resultMap, но такая карта не определена для queryForList.

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 03 марта 2011

Вы просто определяете resultMap для запросов относительно количества строк, которое он должен вернуть.Если вы вызываете queryforObject (), то iBatis будет предполагать, что запрос должен вернуть только одну строку.Если я правильно помню, он выдаст исключение, если вернет больше строк.Если вы вызываете queryForList (), то iBatis будет предполагать, что запрос может вернуть более одной строки.В обоих сценариях для каждой возвращаемой строки iBatis выполнит преобразование на основе resultMap, поэтому вы можете думать о resultMap как о рецепте преобразования одной строки в один объект.

1 голос
/ 16 февраля 2015

queryForList также может использовать resultMap как элемент списка. мы предполагаем, что у вас есть следующий файл sql-map.

<resultMap class="me.skpark.bean.CustomBean" id="custombean">
    <result property="v1" column="VALUE1" />
    <result property="v2" column="VALUE2" />
    <result property="v3" column="VALUE3" />
</resultMap>

<select id="select2" parameterClass="java.util.HashMap" resultMap="custombean" >
    select VALUE1, VALUE2, VALUE3from system_control_m
</select>

Вы можете использовать Список как данные приема.

HashMap<String, String> params = new HashMap<String, String>();
params.put("name", "park");
List<CustomBean> list = sqlMap.queryForList("select2", params);
1 голос
/ 03 марта 2011

Допустим, у вас есть следующая конфигурация в вашем отображаемом XML:

<select id="getFoo" resultClass="java.util.HashMap">
  select acctNbr, name, address
  from addressfile
  order by name
</select>

Затем вы можете использовать queryForList для получения результирующего набора в форме списка и перебора его записей, например:

List<Map<String,Object>> results = (List<Map<String,Object>>) sqlMap.queryForList("getFoo");
for (Map<String,Object> entry : results) {
  String acctNbr = entry.get("acctNbr");
  String name = entry.get("name");
  String address = entry.get("address");
  System.out.println(acctNbr + " : " + name + " : " + address + "\n");
}
0 голосов
/ 07 апреля 2011

Да, верно. IBatis сгенерирует исключение, если при использовании queryForObject() будет найдено более одной записи.

Если вы используете queryForList, вы можете определить resultMap, и я бы лучше определил мой resultMap с возвращенным типом класса и сделал там свойство для сопоставления столбца.Я думаю, что это выглядит более чисто (если смотреть на ваш класс DAO, его легко читать и абстрагировать) и лучше абстрагировать.Однако это мое мнение.

<resultMap id="accountsResult" class="xx.co.xx.AccountsDTO">
    <result property="id" column="id" jdbcType="NUMERIC" javaType="java.lang.Long"/>
    <result property="name" column="name" jdbcType="NUMERIC" javaType="java.lang.Long"/>
</resultMap>

<select id="retrieveAccounts" resultMap="accountsResult">
    SELECT
    acounts.id,
    accounts.name
    FROM accounts
</select>

queryForList ("retrieveAccounts");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...