問(wèn)題
在使用spirngboot集成mybaits的時(shí)候,想要開(kāi)啟命名映射,如圖配置
# mybatis配置
mybatis:
type-aliases-package: com.zhong.springcloud.pojo
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
# 命名映射
configuration:
map-underscore-to-camel-case: true
項(xiàng)目中配置了mybatis-config.xml
mybatis-config.xml文件中的配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 開(kāi)啟二級(jí)緩存-->
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
錯(cuò)誤信息
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method ‘sqlSessionFactory’ threw exception; nested exception is java.lang.IllegalStateException: Property ‘configuration’ and ‘configLocation’ can not specified with together
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.24.jar:5.3.24]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.24.jar:5.3.24]
… 78 common frames omitted
Caused by: java.lang.IllegalStateException: Property ‘configuration’ and ‘configLocation’ can not specified with together
at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.3.24.jar:5.3.24]
at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:488) ~[mybatis-spring-2.0.7.jar:2.0.7]
at org.mybatis.spring.SqlSessionFactoryBean.getObject(SqlSessionFactoryBean.java:633) ~[mybatis-spring-2.0.7.jar:2.0.7]
at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration.sqlSessionFactory(MybatisAutoConfiguration.java:188) ~[mybatis-spring-boot-autoconfigure-2.2.2.jar:2.2.2]
at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration E n h a n c e r B y S p r i n g C G L I B EnhancerBySpringCGLIB EnhancerBySpringCGLIB36ad62da.CGLIB$sqlSessionFactory 1 ( < g e n e r a t e d > ) ? [ m y b a t i s ? s p r i n g ? b o o t ? a u t o c o n f i g u r e ? 2.2.2. j a r : 2.2.2 ] a t o r g . m y b a t i s . s p r i n g . b o o t . a u t o c o n f i g u r e . M y b a t i s A u t o C o n f i g u r a t i o n 1(<generated>) ~[mybatis-spring-boot-autoconfigure-2.2.2.jar:2.2.2] at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration 1(<generated>)?[mybatis?spring?boot?autoconfigure?2.2.2.jar:2.2.2]atorg.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration E n h a n c e r B y S p r i n g C G L I B EnhancerBySpringCGLIB EnhancerBySpringCGLIB 36 a d 62 d a 36ad62da 36ad62da F a s t C l a s s B y S p r i n g C G L I B FastClassBySpringCGLIB FastClassBySpringCGLIB 54783 d 2 d . i n v o k e ( < g e n e r a t e d > ) ? [ m y b a t i s ? s p r i n g ? b o o t ? a u t o c o n f i g u r e ? 2.2.2. j a r : 2.2.2 ] a t o r g . s p r i n g f r a m e w o r k . c g l i b . p r o x y . M e t h o d P r o x y . i n v o k e S u p e r ( M e t h o d P r o x y . j a v a : 244 ) ? [ s p r i n g ? c o r e ? 5.3.24. j a r : 5.3.24 ] a t o r g . s p r i n g f r a m e w o r k . c o n t e x t . a n n o t a t i o n . C o n f i g u r a t i o n C l a s s E n h a n c e r 54783d2d.invoke(<generated>) ~[mybatis-spring-boot-autoconfigure-2.2.2.jar:2.2.2] at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.3.24.jar:5.3.24] at org.springframework.context.annotation.ConfigurationClassEnhancer 54783d2d.invoke(<generated>)?[mybatis?spring?boot?autoconfigure?2.2.2.jar:2.2.2]atorg.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)?[spring?core?5.3.24.jar:5.3.24]atorg.springframework.context.annotation.ConfigurationClassEnhancerBeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.3.24.jar:5.3.24]
at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration E n h a n c e r B y S p r i n g C G L I B EnhancerBySpringCGLIB EnhancerBySpringCGLIB36ad62da.sqlSessionFactory() ~[mybatis-spring-boot-autoconfigure-2.2.2.jar:2.2.2]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_271]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_271]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_271]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_271]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.24.jar:5.3.24]
… 79 common frames omitted
關(guān)閉命名映射之后或者關(guān)閉配置路徑之后項(xiàng)目正常。
原因分析
根據(jù)錯(cuò)誤信息分析,出現(xiàn)該錯(cuò)誤的原因是同時(shí)使用了configLocation和configuration屬性。這兩個(gè)屬性是SqlSessionFactoryBean類的屬性,分別用于指定MyBatis配置文件的位置和MyBatis配置對(duì)象。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-440014.html
在配置中,你在application.xml中指定了configLocation屬性,在mybatis-config.xml中定義了MyBatis的配置對(duì)象,在applicaiton中又指定了configuration屬性,因此出現(xiàn)了沖突。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-440014.html
解決方法
- 解決該問(wèn)題的方法是,需要在應(yīng)用程序中刪除configLocation屬性,只使用applicaiton.yml中的configuration屬性來(lái)指定MyBatis的配置對(duì)象。或者不使用applicaiton.yml中的configuration屬性,就可以配置config-locations并且在其中配置屬性
- 如果需要同時(shí)啟用這兩個(gè)屬性,則需要自定義一個(gè)MybatisConfig類,該類將擴(kuò)展org.mybatis.spring.boot.autoconfigure.MybatisProperties類。
到了這里,關(guān)于在springboot項(xiàng)目中配置數(shù)據(jù)庫(kù)下劃線命名映射為java的駝峰命名時(shí)出錯(cuò)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!