问题:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [ApplicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.core.io.Resource[]' for property 'mapperLocations'; nested exception is java.lang.IllegalArgumentException: Could not resolve resource location pattern [mybatis/*.xml]: ServletContext resource [/mybatis/] cannot be resolved to URL because it does not exist
问题分析:
问题集中在ApplicationContext.xml文件中,与sqlSeesionFactory有关。
原始文件中该部分的代码如下:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="mybatis/*.xml"/>
<property name="typeAliasesPackage" value="com.toki.bean"/>
</bean>
以上配置,不会影响dao,bean,service层之间的配合操作,能够正确寻址到resources文件夹下mybatis文件夹下的*.xml文件。
但是,在添加controller层之后,不能寻址到resources文件夹下的子文件夹和文件。
原因是:未在value后添加classpath:。因为设置资源文件路径时要加classpath:,这表示是资源文件路径的根路径。
解决方案:
将配置修改为:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mybatis/*.xml"/>
<property name="typeAliasesPackage" value="com.toki.bean"/>
</bean>