【问题标题】:Converting query parameter from String to integer将查询参数从字符串转换为整数
【发布时间】:2014-06-10 09:20:46
【问题描述】:

我正在传递一个 HashMap

HashMap<String, String> paramsMap = new HashMap<String, String>();
paramsMap.put("jobXXX", "" + jobState.getCode());
paramsMap.put("rmi_auftrag_xxx", "rmi_auftrag_status");

到 MyBatis 查询:

<select id="loadRmiOrdersByTypeOrState" parameterType="map" resultMap="rmiJobMap">
    <![CDATA[
      SELECT rmi_auftrag_id as rmiJobId,
             rmi_auftrag_typ as rmiJobType,
             rmi_auftrag_status as rmiJobState,
             rm_dokument_id as rmDocId
      FROM   lis_mgr.rmi_auftrag
      WHERE  #{rmi_auftrag_xxx} = #{jobXXX,javaType=String,jdbcType=NUMERIC}
      ]]>
</select>

jobXXX 参数的类型仍然是一个整数。有没有办法告诉 MyBatis 将整数形式的字符串转换为“真”整数?

【问题讨论】:

    标签: mybatis


    【解决方案1】:

    您可以将 Integer 作为 Integer 放入 HashMap 中,然后运行查询。

    HashMap<String, Object> paramsMap = new HashMap<String, String>();
    paramsMap.put("jobXXX", jobState.getCode());
    paramsMap.put("rmi_auftrag_xxx", "rmi_auftrag_status");
    

    【讨论】:

      【解决方案2】:

      方法 1)。用户自定义类型处理程序

      public class StringToIntTypeHandler extends BaseTypeHandler<String> {
      
          @Override
          public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)  throws SQLException {
              ps.setString(i, Integer.valueOf(parameter));
          }
         //...
       }
      

      xml

      #{jobXXX,typeHandler=xxx.StringToIntTypeHandler}
      

      方法 2)。使用 ognl

      <bind name="param" value="@java.lang.Integer@valueOf(jobXXX)" />
        //...
       where  #{rmi_auftrag_xxx} = #{param}
      

      或 ${@java.lang.Integer@valueOf(jobXXX)}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-14
        • 2015-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多