首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

org.apache.ibatis.type.TypeException,该如何解决

2014-01-17 
org.apache.ibatis.type.TypeException画面5个检索条件,哪个检索条件有值,我就把它放在hashmap里,问题是,

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 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>
</where>
</select>



为什么不这么写?

还有你的parameterMap用HashMap就可以了,你自定义的Map在你没参数传进来的时候,肯定null,mybatis用反射查找参数的子厚自然报错,或者你没参数的时候也传个没有key-value的对象进来。

热点排行