将查询参数从String转换为整数

时间:2014-06-10 09:20:47

标签: mybatis

我正在传递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将整数字符串形式转换为“真”整数?

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

方法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)}