springboot集成mybatis的几点问题

        最近,在springboot集成mybatis的过程中,遇到了几个问题,现总结一下。

        问题1:找不到bean。

        Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.read.mybatis.dao.OrderDao',报错截图如下:

        问题原因:需要的bean没有生成并注入。
        解决方式:
        1、对应的mapper类上加@mapper注解。
        2、SpringBoot的启动类上标注@MapperScanner,指定需要扫描的mapper类。
试了一下两种方案,均能解决问题。

        总结:
@Mapper:在dao接口类中,添加此注解;麻烦的在于,每个dao接口类都必须添加此注解;
@MapperScan:可以指定要扫描的dao接口类的路径,可以在启动类中添加此注解,可替代@Mapper注解(此模块内dao接口类不用都添加@Mapper注解)

        问题2:找不到mapper.xml文件里对应的方法。

        org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.read.mybatis.dao.OrderDao.getOrders,报错截图如下:

        问题原因:
        检查了mapper的namespace配置的也没有问题,仔细检查了相应代码也没有发现问题。最后发现mapper.xml文件并未被编译进去,如图:

 

        解决方式:
        1、由于mapper.xml文件在src/main/java下面,maven打包的时候会默认为里面只有Java文件,而不会打包xml文件,需要配置pom.xml文件,在<build>标签里面添加如下内容:

<resource>
    <directory>src/main/java</directory>
    <includes>
        <include>**/*.xml</include>
    </includes>
</resource>

         修改后,测试,问题解决。另外,也可以把mapper.xml文件放到resources目录下,然后在配置文件里通过mybatis.mapper-locations指定位置,如图:

 

        同样,经过测试也可以解决问题。
        总结:启动类上配置了@MapperScan(扫面mapper类的路径)和pom.xml中放行了mapper.xml后,如果mapper类和mapper.xml在同一个路径下时,配置mapper-locations没有意义;
如果mapper类和mapper.xml不在同一个路径下时,mapper-locations就有用了(前提也得有pom.xml中放行了mapper.xml),在application.properties中配置
mybatis.mapper-locations,用mapper-locations指定mapper.xml的路径,OK。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值