MyBatis resultMap中是否需要'jdbcType'?

时间:2018-06-17 07:03:46

标签: mybatis

当我们使用Mybatis时,在<select> ...</select>语句中我知道我们需要设置jdbcType因为 IN变量可能为null,但是当我看到Mybatis的文档时,我发现jdbcType <result>...</result>下的ResultMap jdbcTpe。的文件 <result>...</result>中的select是:

  

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

粗体字表示只有在插入,更新或删除时可为空的列才需要。 但是,结果的元素在jdbcType中使用,既不插入,也不更新或删除。 那么,是否有必要在<result>...</result>中使用{{1}}?

1 个答案:

答案 0 :(得分:1)

大多数时候,没有。为什么?继续阅读。

如果要使用null作为JDBC参数值,则需要来指定jdbcType。这是您无法避免的JDBC规范的限制。因此,如果JDBC参数的可能性很小,那么可以指定空值。

这不适用于MyBatis标记内由MyBatis预处理的参数,例如您在标记的“ test”属性中使用的参数。这些不是JDBC参数。

现在,对于您阅读的列。这些是您感兴趣的。问题是大多数时候您不需要它们。 MyBatis将为您选择正确的JDBC类型。嗯...我的情况一直是99.999%。

其他0.001%呢?对于一些很少使用的奇异列类型,MyBatis可能会为您选择错误的JDBC类型。 MyBatis的设计师考虑了这种情况,并给了您覆盖它的机会。我想我记得MyBatis试图将XML读取为一个VARCHAR类型的数据库列,但是我不记得是哪个数据库。

最底线,在读取列时不要使用它,除非MyBatis以错误的方式读取异类数​​据类型的列(XML,UUID,POINT等)。