You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MyBatis传入HashMap作为查询参数报无效列类型1111如何解决

问题原因与解决方案

1. 核心错误:DAO层调用MyBatis方法时漏传参数

你当前DAO层的selectOneByNTB方法中,调用selectOne仅传入了statementId,没有将接收的HashMap参数传递给MyBatis,导致SQL执行时所有占位符参数取值都为null。Oracle处理未指定jdbcType的null值时,会默认识别为OTHER类型(对应报错中的错误码1111),直接抛出无效列类型异常。

修正后的DAO层代码:

public Customer_infoDto selectOneByNTB(HashMap<String, String> map) {
    System.out.println("name"+(map.get("name")));
    // 新增第二个参数,将map传入MyBatis
    return ss.selectOne(NameSpace + "selectOneByNTB", map);
}

2. 次要问题:DAO层打印逻辑键名不匹配

你往HashMap中存储用户姓名用的键是name,但DAO层打印时取的键是cust_name,这行打印的结果必然为null,和你之前观察到的「键值正常打印」不冲突,是因为你之前看的是控制器层的打印输出,修正时直接统一键名即可。

3. 可选优化:Mapper参数指定jdbcType

如果业务中允许这三个查询参数为空,建议给Mapper中的参数显式指定jdbcType,避免后续再出现同类null值报错:

<select id="selectOneByNTB" parameterType="hashMap" resultType="custDto">
  select * from Customer_info 
  where cust_name = #{name,jdbcType=VARCHAR} 
  and cust_telephone=#{telephone,jdbcType=VARCHAR} 
  and cust_birthday=#{birthday,jdbcType=DATE}
</select>

如果birthday参数传入的是字符串格式,还可以配合Oracle的to_date函数做显式日期转换,避免数据库隐式转换带来的额外问题。

内容的提问来源于stack exchange,提问作者thecenterofpower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:57:03