在mybatis为什么这个SQL工作,但另一个不?

时间:2017-03-21 09:09:10

标签: mybatis

今天我写了一个像这样的SQL

<select id="selectVoByEtpsId" parameterType="java.lang.String"
        resultMap="BaseResultMap" >
        SELECT P.ETPS_APTT_PUTREC_ID, P.ETPS_ID, P.PARA_CD,P.PARA_VAL,
        C.PARA_NAME,C.PARA_TYPE,C.PARA_SEQNO,P.CREATE_USER, P.INDB_TIME, P.UPDATE_USER,P.UPDATE_TIME  
        FROM USER_ETPS_APTT_PUTREC P
        RIGHT JOIN USER_ETPS_APTT_CONFIG C
        ON ETPS_ID=#{etpsId,JDBCTYPE=VARCHAR}
        AND P.PARA_CD=C.PARA_CD
    </select>

但我得到这样的错误

org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.dao.IUserEtpsApttPutrecDao.BaseResultMap
    at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)

当我将sql更改为此

<select id="selectVoByEtpsId" parameterType="java.lang.String"
    resultMap="BaseResultMap" >
    SELECT P.ETPS_APTT_PUTREC_ID, P.ETPS_ID, P.PARA_CD,P.PARA_VAL,
    C.PARA_NAME,C.PARA_TYPE,C.PARA_SEQNO,P.CREATE_USER, P.INDB_TIME, P.UPDATE_USER,P.UPDATE_TIME  
    FROM USER_ETPS_APTT_PUTREC P
    RIGHT JOIN USER_ETPS_APTT_CONFIG C
    ON ETPS_ID=#{etpsId}
    AND P.PARA_CD=C.PARA_CD
</select>

它有效。
谁能告诉我为什么?感谢。

1 个答案:

答案 0 :(得分:0)

错误消息指出存在重复的结果映射定义,其标识为BaseResultMap

此外,必须遵守属性名称的情况。如果保留大写,请写ETPS_ID=#{etpsId,jdbcType=VARCHAR}或期望解析SQL Mapper配置时出错。