日期:2014-05-18  浏览次数:20600 次

org.apache.ibatis.type.TypeException
画面5个检索条件,哪个检索条件有值,我就把它放在hashmap里,
问题是,一个条件都没有的时候报错,至少有一个条件就没问题呢!


  <parameterMap type="java.util.HashMap" id="countParam">
    <parameter property="A"   javaType="java.lang.String"  jdbcType="VARCHAR"  mode="IN"/>
    <parameter property="B"   javaType="java.lang.String"  jdbcType="VARCHAR"  mode="IN"/>
    <parameter property="C"   javaType="java.lang.String"  jdbcType="VARCHAR"  mode="IN"/>
    <parameter property="D"    javaType="java.lang.String"  jdbcType="VARCHAR"  mode="IN"/>
  </parameterMap>
  
  <select id="countByMap"  parameterMap="countParam" resultType="java.lang.Integer">
    select count(*) from T
    where 1 = 1
    <if test="A!= null" >
and T.A = #{A,jdbcType=VARCHAR}
    </if>
    <if test="B!= null" >
and T.B = #{B,jdbcType=VARCHAR}
    </if>
    <if test="C!= null" >
and T.C = #{C,jdbcType=VARCHAR}
    </if>
    <if test="D!= null" >
and T.D like #{D,jdbcType=VARCHAR}
    </if>
  </select>


------解决方案--------------------
没参数的时候你是不是传了个null作为参数而不是new一个hashmap
------解决方案--------------------
自定义的Map会初始化值.所以你放什么类型的值进去哪怕是空的也不会报错.
但是java的HashMap和String一样是对这个实例的引用.需要初始化
这样说你明白?
------解决方案--------------------
引用:
Quote: 引用:

没参数的时候你是不是传了个null作为参数而不是new一个hashmap


不是这的问题,把 parameterMap 换成 parameterType="java.util.HashMap" ,不用自己定义的map,就不报错了,根本原因木有找到!谢谢你的回复!


直接引用java.util.HashMap的时候,如果你没有参数,那么ibatis会自动给你new一个hashmap,这就是为什么你可以引入java.util.Map这种接口参数而可以运行的原因,当引用alias(<parameterMap type="java.util.HashMap" id="countParam">)这种参数的时候,如果你里面没有参数,那么就会抛出空引用了

BTW,4L是正确的
------解决方案--------------------


<select id="countByMap" parameterMap="countParam" resultType="java.lang.Integer">
select count(*) from T
<where>
<if&n