如何在 Spring 引导应用程序的 application.properties 文件中设置 MyBatis 配置属性?

How do I set MyBatis configuration properties in an application.properties file in a Spring Boot application?

MyBatis Spring Boot Starter documentation 列出了可以在 application.properties 文件中设置的属性,该列表包括:

configuration: A MyBatis Configuration bean. About available properties see the MyBatis reference page

从那里看不是很明显,但我认为这表明您可以添加如下内容:

mybatis.configuration.jdbcTypeForNull=VARCHAR

这似乎可行;当然,如果我将 VARCHAR 更改为不是枚举 JdbcType 的有效值的内容,我会收到错误消息。但是,它似乎也没有接受我的设置。

当我使用调试器时,我可以看到调用了MybatisProperties.setConfiguration() Configuration.setJdbcTypeForNull()之前,这意味着默认值(JdbcType.OTHER) 而不是我要设置的值。

我是不是误解了这个功能应该如何使用,或者这是一个错误?还有其他人像这样设置配置值吗?在其他地方,我只能看到使用 XML 文件的示例,如果可能的话,我宁愿避免使用这些文件。

嗯,这很尴尬

我放弃了尝试在 application.properties 中使用 configuration 属性 并求助于我试图避免的 XML 配置,但现在,在这里看到一些有用的建议后,我回到我的代码,将其从 XML 配置改回 mybatis.configuration.jdbcTypeForNull=NULL 并重新 运行 我的测试,这在以前同样的条件,但现在它通过了。

我不知道与以前有什么不同 - 调试我看到了与上面提到的相同的行为 - 配置 bean 似乎 在启动期间将 jdbcTypeForNull 参数设置回 OTHER ,但是当它在查询期间被访问时,它又是 NULL。我会把这个问题留在这里,以防它是一个竞争条件,它稍后又开始失败,但现在我的问题似乎神秘地消失了。

如果您要使用mybatis.configuration.jdbcTypeForNull,请记住不要同时指定configLocation 属性。否则您的设置将被清除为默认设置。

正如spring boot所做的那样,在Configuration.setJdbcTypeForNull()之前调用MybatisProperties.setConfiguration()是真的。因为 spring boot 尝试将 configuration 设置为 MybatisProperties 但发现其成员 configuration 为 null,所以 spring boot 将实例化一个新的 Configuration 并且立即将其分配给 MybatisProperties。之后,spring boot 将尝试将所有 mybatis.configuration.* 分配给 MybatisProperties.

的这个成员

如果要使用XML配置mybatis,需要在元素<settings/>下指定<setting name="jdbcTypeForNull" value="VARCHAR"/>example.

这绝对有效。

将此 <setting name="jdbcTypeForNull" value="OTHER"/> 添加到您的 mybatis-config.xml 它应该可以正常工作。否则,请尝试使用 oracle/mysql as db

对您的查询进行查询,这对我来说非常好
   insert into students 
     (id,name,class,date_of_joining)
     values 
     (#{id,jdbcType=INTEGER},#{class,jdbcType=TIMESTAMP},
     #{class,jdbcType=NVARCHAR},#{date_of_joining,jdbcType=TIMESTAMP})

这里是mybatis提供的list of jdbcTypes。如果您觉得约束有时可以 empty/null,则需要将其添加到每个约束中。

如果您正在使用 application.yml 试试

mybatis:
  configuration:
    jdbc-type-for-null: 'NULL'