Ibatis - QueryforList

时间:2011-03-03 14:52:19

标签: ibatis

您好 这可能是基本问题,但我是Ibatis的新手。 queryForList将返回哪些对象的列表?通常,对于queryForObject,我们定义了一个resultMap,但是没有为queryForList定义这样的map。

提前致谢。

4 个答案:

答案 0 :(得分:2)

您只需定义一个resultMap,以查询它应返回的行数。如果你调用queryforObject(),那么iBatis将假设查询schould只返回一行。如果我没记错的话,如果返回更多行,它将抛出异常。如果你调用queryForList(),那么iBatis将假设查询可以返回多行。在两种情况下,返回的每一行iBatis都将基于resultMap进行转换,因此您可以将resultMap视为如何将单行转换为单个对象的配方。

答案 1 :(得分:1)

假设您在映射XML中具有以下配置:

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

然后,您可以使用queryForList检索List表单中的结果集并迭代其条目,如下所示:

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");
}

答案 2 :(得分:1)

queryForList也可以使用resultMap作为List的项目。 我们假设您有以下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>

您可以使用List作为接收数据。

HashMap<String, String> params = new HashMap<String, String>();
params.put("name", "park");
List<CustomBean> list = sqlMap.queryForList("select2", params);

答案 3 :(得分:0)

是的,如果使用queryForObject()时发现多条记录,iBatis会抛出异常。

如果您使用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”);