吧log忘了 补上### Error querying database.  Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType VARCHAR . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 列索引が無効です。
### The error may exist in jp/co/tomoeshokai/kaigai/common/dao/KaiMsKamokuMapper.xml
### The error may involve jp.co.tomoeshokai.kaigai.common.dao.KAI_MS_KAMOKU.countParam
### The error occurred while setting parameters
### SQL: select count(*) from KAI_MS_KAMOKU     where 1 = 1

解决方案 »

  1.   

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

  2.   


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

  3.   

    自定义的Map会初始化值.所以你放什么类型的值进去哪怕是空的也不会报错.
    但是java的HashMap和String一样是对这个实例的引用.需要初始化
    这样说你明白?
      

  4.   


    不是这的问题,把 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是正确的
      

  5.   


     很明显 java.lang.NullPointerException  的错误吧  
      

  6.   

    <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的对象进来。