我一直在寻找,而且我没有这么清楚。使用MyBatis映射器时,是否需要设置jdbcType
?我正在使用MySql。
对于我所读过的内容,它是为了传递空值,但我不知道这是否仍然是必要的,或者它是旧的。例如,这两个查询都有效:
SELECT <include refid="columns"/> FROM user WHERE uid=#{uid, jdbcType=INTEGER}
SELECT <include refid="columns"/> FROM user WHERE uid=#{uid}
答案 0 :(得分:8)
正如您自己提到的,您需要在为参数传递空值时指定jdbcType
。
即使值本身为NULL,某些数据库也需要知道值的类型。出于这个原因,以获得最大的可移植性,它是指定的JDBC specification itself that requires the type,MyBatis需要传递它,因为它是在JDBC之上构建的。
只有在插入,更新或删除时可为空的列才需要JDBC类型。这个 是JDBC要求,而不是MyBatis要求。因此,即使您直接编写JDBC,也需要指定此类型 - 但仅限于可以为空的值。
大多数情况下,您不需要指定jdbcType
,因为MyBatis非常智能,可以从您正在使用的对象中找出类型。但是,如果您将参数发送到HashMap
内的MyBatis语句,并且其中一个参数为null,则MyBatis将无法通过查看{{1}来确定参数的类型。因为HashMap
只是一个通用容器而HashMap
本身不包含类型信息。此时提供null
是个好主意,以便稍后切换数据库实现不会导致任何null值问题。