如何在 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'
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'