11

我一直在寻找,我不是很清楚。使用 MyBatis 映射器时,是否需要设置jdbcType? 我将它与 MySql 一起使用。

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

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

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

1 回答 1

10

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

一些数据库需要知道值的类型,即使值本身是 NULL。出于这个原因,为了获得最大的可移植性需要指定类型的是 JDBC 规范本身,而 MyBatis 需要传递它,因为它是建立在 JDBC 之上的。

MyBatis 文档

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

大多数时候你不需要指定,jdbcType因为 MyBatis 足够聪明,可以从你正在使用的对象中找出类型。但是,如果您将参数发送到 a 中的 MyBatis 语句HashMap,并且其中一个参数为 null,MyBatis 将无法通过查看来确定参数的类型,HashMap因为HashMapa 只是一个通用容器和null它本身不携带类型信息。此时最好提供 ,jdbcType以便稍后切换数据库实现不会导致空值出现任何问题。

于 2013-09-07T21:16:32.463 回答