ibatis - 如何映射值列表

时间:2017-04-06 15:06:58

标签: java sql ibatis

我有一个select语句,它返回相同数据类型(VARCHAR)的值列表。结果是1到6行之间的任何位置。我使用queryForList()并将响应存储在List对象中。执行时我收到错误

  

---原因:com.ibatis.sqlmap.client.SqlMapException:找不到类型处理程序来映射属性' statusList'到列' null'。   一种或两种类型或类型的组合不是   支撑。

SQL查询在SQL窗口中执行时返回3行。你能帮忙吗?提前致谢

<resultMap id="retrieveStatusResult"
    class="ie.org.model.ResponseBO">
    <result property="statusList" columnIndex="1" />
</resultMap>

<select id="retrieveStatus" parameterClass="ie.org.model.RequestBO"
    resultMap="retrieveStatusResult">
    SELECT (SELECT DESCRIPTION 
    FROM TABLEA LCD 
    WHERE LCD.CODE_DETAIL = QPL.STATUS)
    FROM  TABLEB QPL 
    WHERE QPL.QUOTE=#Quote#
    AND VERSION IN (SELECT VERSION FROM TABLEB WHERE QUOTE = #Quote#)       
</select>

ResponseBO.java

private List statusList = new ArrayList();

public List getStatusList() {
    return statusList;
}

public void setStatusList(List statusList) {
    this.statusList = statusList;
}

1 个答案:

答案 0 :(得分:1)

您没有正确映射结果/您的错误。

使用queryForList()时,您尝试创建resultMap中包含的对象列表。在您的BO中,您尝试从查询答案的每一行创建一个列表。

你应该使用这样的BO:

private String status;

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

具有适合您查询答案的类型。

要使用查询结果,请按以下方式调用您的语句:

List<ResponseBO> listStatus = new ArrayList<ResponseBO>();

listStatus = (List<ResponseBO>)queryForList("retrieveStatus",properys);

propertys是包含查询参数的哈希映射