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

时间:2016-04-29 13:07:52

标签: java spring spring-boot mybatis spring-mybatis

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

  

配置:MyBatis配置bean。关于可用属性,请参阅MyBatis参考页面

从那里开始并不是很明显,但我认为它的建议是你可以添加这样的东西:

mybatis.configuration.jdbcTypeForNull=VARCHAR

这似乎有效;当然,如果我为枚举JdbcType的有效值更改VARCHAR,我会收到错误。但是,它似乎也没有恢复我的设置。

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

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

嗯,这很令人尴尬

我放弃尝试使用configuration中的application.properties属性,并使用了我试图避免使用的XML配置,但刚才,在这里看到了一些有用的建议,我去了回到我的代码,将它从XML配置改回到mybatis.configuration.jdbcTypeForNull=NULL并重新运行我的测试,这在以前的相同条件下肯定是失败的,但现在它已经过去了。

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

3 个答案:

答案 0 :(得分:0)

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

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

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

这肯定有用。

答案 1 :(得分:0)

将此<setting name="jdbcTypeForNull" value="OTHER"/>添加到您的mybatis-config.xml它应该可以正常工作。另外,请尝试使用oracle / mysql作为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。如果您觉得约束有时可以为空/ null,则需要将其添加到每个约束中。

答案 2 :(得分:0)

如果你使用 application.yml 试试

leave