Spring boot 使用问题记录

Spring Boot Mybatis 映射文件配置问题解析
本文记录了在Spring Boot中使用Mybatis时遇到的问题,当映射XML文件放置在resources目录下,通过IDE运行时会出现org.apache.ibatis.binding.BindingException。原因是映射文件被打包进BOOT-INF下,导致本地运行时无法找到。解决方案是在本地环境中注释相关maven配置,生产环境则需要取消注释,以确保classpath正确指向BOOT-INF/classpath。

(1.)Mybatis映射xml放在resources路径下导致的问题,看下面maven配置:

<resources>
         <!-- 本地jar打包配置 -->
  		 <resource>
			 <!-- 指定属性文件的目录,build的过程需要找到它,并且将其
			 放到targetPath下,默认的directory是${basedir}/src/main/resources-->
             <directory>src/main/webapp/WEB-INF/lib</directory>
			 <!-- 指定build资源到哪个目录,默认是base directory -->
             <targetPath>BOOT-INF/lib/</targetPath>
			 <!-- 指定包含文件的patterns,符合样式并且在directory目录下的文件将会包含进project的资源文件。-->
             <includes>
                 <include>**/*.jar</include>
             </includes>
         </resource>
         <!-- resources下的文件build配置 -->
         <resource>
	        <directory>src/main/resources</directory>
	        <targetPath>BOOT-INF/classes/</targetPath>
	      </resource>
  	</resources>

上面的配置打包后通过java -jar执行没有问题,因为spring-boot识别。但是,本地通过IDE运行的时候会报org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

以下是本人项目里面读取映射文件的代码:

@Bean
 public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
 
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:mybatis/mapper/**/*.xml"));

        return sqlSessionFactoryBean.getObject();
    }   
    

代码里是直接读取classpath下对应的资源,但是如果加上上面的配置,build完成后classpath的文件如下:

对应的映射文件被编译进了BOOT-INF下。这样就会导致本地代码跑的时候在classpath下根据代码里面写的路径找不到对应的映射文件,所以报了这个错。所以在本地环境下需要把对应的resource注释掉。但是生产环境需要取消注释:看下面打好包的文件:

个人理解:spring-boot项目classpath默认为BOOT-INFO下的classpath,打包的时候会默认打到对应的BOOT-INF/classpath下。如果不加上面配置,是不会打进去的。启动jar包时会报错。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值