您好 这可能是基本问题,但我是Ibatis的新手。 queryForList将返回哪些对象的列表?通常,对于queryForObject,我们定义了一个resultMap,但是没有为queryForList定义这样的map。
提前致谢。
答案 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”);