Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring引导应用程序的application.properties文件中设置MyBatis配置属性?_Java_Spring_Spring Boot_Mybatis_Spring Mybatis - Fatal编程技术网

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

Java 如何在Spring引导应用程序的application.properties文件中设置MyBatis配置属性?,java,spring,spring-boot,mybatis,spring-mybatis,Java,Spring,Spring Boot,Mybatis,Spring Mybatis,MyBatis列出了可以在application.properties文件中设置的属性,该列表包括: 配置:MyBatis配置bean。关于可用属性,请参见MyBatis参考页 从这里看不太明显,但我认为它的意思是,你可以添加如下内容: mybatis.configuration.jdbcTypeForNull=VARCHAR 这似乎有效;当然,如果我更改VARCHAR的内容对于enum JdbcType来说不是有效的值,我会得到一个错误。然而,它似乎也没有改善我的设置 当我使用调试器时,我可

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

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

从这里看不太明显,但我认为它的意思是,你可以添加如下内容:

mybatis.configuration.jdbcTypeForNull=VARCHAR
这似乎有效;当然,如果我更改
VARCHAR
的内容对于enum JdbcType来说不是有效的值,我会得到一个错误。然而,它似乎也没有改善我的设置

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

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

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


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

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

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

如果要使用XML配置mybatis,则需要在元素
下指定为

这肯定会起作用。

将此
添加到您的
mybatis config.xml
中,它应该可以正常工作。否则,请尝试对您的查询执行此操作,它在我使用oracle/mysql作为数据库时运行得非常好

   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提供的。如果您觉得约束有时可能为空/空,则需要将其添加到每个约束中。

如果您使用的是application.yml,请尝试

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

这是你见过的工作吗?我收到一条错误消息:“configuration.jdbcTypeForNull字段上的对象“mybatis”中的字段错误:拒绝值[12]…嵌套异常为java.lang.IllegalArgumentException:No enum constant org.apache.ibatis.type.JdbcType.12]。请检查
JdbcType
并找到所需的真实值。不,不是这样。您可以在错误消息中看到,它正在尝试使用…ibatis.type.JdbcType。正如我在问题中所说,使用VARCHAR确实正确地设置了值,但是在设置之后,它会被重新设置为默认值。Ok。我得到了它。我在火车上,用我的手机回复你,很难读懂消息来源。如果可以,我会留下任何消息。
Configuration\setJdbcTypeForNull()
MybatisProperties\setConfiguration()
正确后被调用。原因稍后应映射到您在需要时配置的内容。Spring将创建一个默认的
配置
,并将其分配给
MybatisProperties
,然后正确设置
JdbcTypeForNull
。您确定该值不是您所配置的值吗?您是否尝试将此
添加到
mybatis config.xml
中,这样您就可以无错误地获取空值或空值。当您从数据库中获取空值时,此设置不适用吗?我正在看的例子是在insert中将列设置为null。我犯的错误是错误的。您是否使用bean作为参数类型。OTHER是默认值,这是Oracle无法使用的。我目前正在使用它,但将其设置为…value=“NULL”,这很有效。但问题的关键是如果可能的话不要使用XML配置。我的问题现在似乎已经解决了——请参阅我的文章的编辑。您是否在映射器xml中使用bean作为参数类型。