您的位置:首页 > 其它

mybatis3.2.0与mybatis3.3.0传参异常

2016-04-28 10:48 148 查看
[size=small]项目使用的是SpringMvc3.2.2+Mybatis3.2.0+SQLServer,经常会有根据某个主键字段查询数据,通常都是Integer类型,写sql的时候一般会类似这样:[/size]

<mapper namespace="com.back.dao.PersonDao">
<resultMap id="BaseMap" type="com.back.pojo.Person">
<result column="pid" property="pid" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="remark" property="remark" jdbcType="VARCHAR" />
</resultMap>

<select id="get" resultMap="BaseMap"parameterType="java.lang.Integer">
SELECT
pid
, name
, remark
FROM person
WHERE pid= #{pid,jdbcType=INTEGER}
</select>
</mapper>

上面的sql中我们设定的parameterType是Integer,查询条件的pid类型也是Integer,service层定义一个抽象的公用泛型get方法,子类去实现:

public abstract T get(Serializable paramSerializable);

public T get(Serializable id){
return ((PersonDao) this.dao).get(id);
}

调用时如下:

Person person = (Person )service.get(pid);

在mybatis3.2.0版本下,调用的时候定义了一个String参数类型,如下

String pid = "123";
Person person = (Person )service.get(pid);

最后查询出来的结果也是正常的,并无出现参数类型转换错误。后来把mybatis升级到3.3.0之后,问题就来了,调用get方法时,原先传入的字符串"123"会提示参数类型错误,改成传入整形的123就不会出错了。
上面列举的是xml文件的sql参数是pid= #{pid,jdbcType=INTEGER},调用传入的可能是字符串;另外一种情况就是pid= #{pid,jdbcType=VARCHAR},调用传入的可能是整形,这两种在mybatis3.2.0都可以正常查询,相反在mybatis3.3.0都会出错。
这里提醒下各位在开发的时候严格按照数据类型来,一不小心就掉坑里了,仅供借鉴。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: