MyBatis映射器中是否需要jdbcType?

时间:2013-09-05 20:56:36

标签: jdbc mybatis

我一直在寻找,而且我没有这么清楚。使用MyBatis映射器时,是否需要设置jdbcType?我正在使用MySql。

对于我所读过的内容,它是为了传递空值,但我不知道这是否仍然是必要的,或者它是旧的。例如,这两个查询都有效:

SELECT <include refid="columns"/> FROM user WHERE uid=#{uid, jdbcType=INTEGER}

SELECT <include refid="columns"/> FROM user WHERE uid=#{uid}

1 个答案:

答案 0 :(得分:8)

正如您自己提到的,您需要在为参数传递空值时指定jdbcType

即使值本身为NULL,某些数据库也需要知道值的类型。出于这个原因,以获得最大的可移植性,它是指定的JDBC specification itself that requires the type,MyBatis需要传递它,因为它是在JDBC之上构建的。

来自MyBatis documentation

  

只有在插入,更新或删除时可为空的列才需要JDBC类型。这个   是JDBC要求,而不是MyBatis要求。因此,即使您直接编写JDBC,也需要指定此类型 - 但仅限于可以为空的值。

大多数情况下,您不需要指定jdbcType,因为MyBatis非常智能,可以从您正在使用的对象中找出类型。但是,如果您将参数发送到HashMap内的MyBatis语句,并且其中一个参数为null,则MyBatis将无法通过查看{{1}来确定参数的类型。因为HashMap只是一个通用容器而HashMap本身不包含类型信息。此时提供null是个好主意,以便稍后切换数据库实现不会导致任何null值问题。