org.apache.ibatis.type.TypeException

xiaoxiongpangzi 2014-01-13 05:00:36
画面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>

...全文
5045 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lavener 2014-01-16
  • 打赏
  • 举报
回复


<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的对象进来。
wenjie4892543 2014-01-16
  • 打赏
  • 举报
回复
很明显 java.lang.NullPointerException 的错误吧 。。。
文森特先森 2014-01-15
  • 打赏
  • 举报
回复
引用 3 楼 u013225184 的回复:
[quote=引用 2 楼 sfgm521 的回复:] 没参数的时候你是不是传了个null作为参数而不是new一个hashmap
不是这的问题,把 parameterMap 换成 parameterType="java.util.HashMap" ,不用自己定义的map,就不报错了,根本原因木有找到!谢谢你的回复![/quote] 直接引用java.util.HashMap的时候,如果你没有参数,那么ibatis会自动给你new一个hashmap,这就是为什么你可以引入java.util.Map这种接口参数而可以运行的原因,当引用alias(<parameterMap type="java.util.HashMap" id="countParam">)这种参数的时候,如果你里面没有参数,那么就会抛出空引用了 BTW,4L是正确的
真爱怎么卖 2014-01-14
  • 打赏
  • 举报
回复
自定义的Map会初始化值.所以你放什么类型的值进去哪怕是空的也不会报错. 但是java的HashMap和String一样是对这个实例的引用.需要初始化 这样说你明白?
xiaoxiongpangzi 2014-01-14
  • 打赏
  • 举报
回复
引用 2 楼 sfgm521 的回复:
没参数的时候你是不是传了个null作为参数而不是new一个hashmap
不是这的问题,把 parameterMap 换成 parameterType="java.util.HashMap" ,不用自己定义的map,就不报错了,根本原因木有找到!谢谢你的回复!
文森特先森 2014-01-13
  • 打赏
  • 举报
回复
没参数的时候你是不是传了个null作为参数而不是new一个hashmap
xiaoxiongpangzi 2014-01-13
  • 打赏
  • 举报
回复
吧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

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧