【问题标题】:MyBatis parameter from HashMapHashMap 中的 MyBatis 参数
【发布时间】:2017-09-21 21:18:32
【问题描述】:

在映射器界面中我有:

ArrayList<Item> select(@Param("filterId")int filterId, @Param("filterData")HashMap<String,Object> filterData);

在映射器 xml 中我有:

 <select id="select" parameterType="map" resultMap="RM">
        SELECT ... 
        FROM ....
        WHERE id=#{filterData["id"]}
    </select>

没有错误,但结果不符合预期(它返回空集,但我知道具有此类 id 的项目存在)。 #{filterData["id"]} 似乎不起作用。我的错在哪里?

【问题讨论】:

  • 什么是不期望的?
  • @Konstantin V. Salikhov 它返回空集。
  • 为什么你的 attr 被命名为sesultMap?你试过调试吗?查询时为id分配什么参数值?
  • @Konstantin V. Salikhov sesultMap - 我在提问时犯了错误。

标签: java mysql mybatis ibatis


【解决方案1】:

我找到了答案:

 <select id="select" parameterType="map" resultMap="RM">
        SELECT ... 
        FROM ....
        WHERE id=#{filterData.id}
    </select>

【讨论】:

  • 什么是filterData?它是地图的钥匙吗?而filterData.id是映射值的id属性?
  • filterData 在注解@Param("filterData") HashMap&lt;String,Object&gt; filterData 中指定,id 是它的键之一。
【解决方案2】:

如果您有纯 java 类,您可以将 parameterType 映射为查询的输入,并像这样以不同的自定义 pojo class 返回。

<select id="getCustomMember" parameterType="com.custom.member" resultMap="custDocMap">
        select
        customer_id, cust_start_dt, cust_type, src_sys_doc_id, 
        legal_backer_id, eenv_create_dt
        from
        web_data..wd_edoc
        where
        eenv_create_dt = #{member.date}
    </select>

【讨论】:

    【解决方案3】:

    如果您的 id 是从列表中迭代的动态 ID,您可以使用 #{filterData.${id}}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多