MyBatis映射器中是否需要jdbcType?

enk*_*ara 8 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}
Run Code Online (Sandbox Code Playgroud)

Bog*_*dan 8

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

即使值本身为NULL,某些数据库也需要知道值的类型.出于这个原因,为了最大程度的可移植性,JDBC规范本身需要指定类型,MyBatis需要传递它,因为它构建在JDBC之上.

MyBatis文档:

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

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