最近在学习springboot,不得不说spring组件一站式解决方案太强大了,不仅简化了使用 Spring 的难度,还简省了繁重xml的配置,提供了各种启动器,能在运行过程中自定配置,大大减少了工程开发的时间,原本创建工程时需要繁琐的配置,而springboot只需要配置几个依赖就可以搞定,使得开发者能够快速速上手。
不啰嗦了,下面来看我遇到的问题
问题描述:
之前我们在搭建SpringMvc项目的时候,我们通常会把层次全部创建在一个工程里,然后再这个工程里创建不同的包来存放这些分层里(如controller、service、dao、pojo),当然springboot也可这么实现例如下图
这种结构如果是出现org.apache. ibatis.binding. BindingException Create breakpoint : Invalid bound statement (not found):这个问题大多数有一下几种情况
- 配置文件中mapper文件配置的包路径不正确
- mapper文件中的namespace与对应mapper接口的路径不一致
- 所调用dao层的方法与对应mapper文件中不一致
- 方法返回值是List<>,而select元素没有正确配置ResultMap,或者只配置ResultType
- 编译错误,targetclasses中不存在mapper对应的xml文件
我创建工程的时候创建了多个model,由父工程,管理子模块子模块之间的依赖如下图
创建过程很顺利,途中没有遇到什么以外,各个module之间调用没有问题,于是我开始写数据库操作,为了方便测试只写了一个简单的查询,测试的时候就出现异常了一直报
org.apache. ibatis.binding. BindingException: Invalid bound statement (not found):于是我按照上面提到的几点一一排查,发现没有问题,为什么不好使,是什么问题导致的呢?百思不得其解,于是我开始了各种百度,大多数帖子都是说上面提到的几种情况,也有说在mapper接口上面加上@Mapper注解,或者在启动类里加上@MapperScan这个注解等等......按照帖子上的答案一一去实验,都没有解决问题!就这个问题我耗了整整一天,也没整出个一二三来,头发都被自己揪掉了大把!到底是哪儿出现了问题了呢? 最后实在没辙了在技术群里问了这个问题,然后一个老哥发现了问题所在,原因竟然是我把数据库的配置写到了dao层里的application.properties配置文件里了,然后导致的这个问题,把数据库配置移到启动类所在的module里面就解决了!就解决了?我的天...这就是折磨我一天的答案....
原因分析:
后来通过和那位群友的探讨,它是根据各种不同类型的数据源,然后进行自动配置,自动配置前缀就是spring.datasource,默认找的是启动类所属模块的application.properties,而我数据源写到了dao这个module里的application.properties配置文件中了
解决方案:把application.properties配置文件写在启动类所属模块中



