ServiceImpl层引入Mapper方法失败问题的解决

ServiceImpl层引入Mapper方法注入失败,项目一启动就报异常:

Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement

[main] ERROR o.s.b.SpringApplication - [reportFailure,824] - Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysJobController': Unsatisfied dependency expressed through field 'jobService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysJobServiceImpl': Invocation of init method failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.yio.job.mapper.SysJobMapper.selectJobAll at ...........

检查了启动类,已经加了MapperScan注解

@MapperScan("com.yio.**.mapper")

再去看配置文件,

# mybatis配置

mybatis:

# 搜索指定包别名

typeAliasesPackage: com.yio.agent

# 配置mapper的扫描,找到所有的mapper.xml映射文件

mapperLocations: classpath:mapper/**/*.xml

反复检查了多次,代码层面和配置文件均未发现有问题,后面就有点怀疑是resources里边目录定义的问题,先来对比一下resources里边层级结构,先来看启动正常的,

ServiceImpl层引入Mapper方法失败问题的解决_第1张图片

再来看启动报错的,

ServiceImpl层引入Mapper方法失败问题的解决_第2张图片

 乍一看,感觉结构一样啊,没什么问题。

再来看编译以后的结构,也就是target里边的层级结构

先来看正常的:

ServiceImpl层引入Mapper方法失败问题的解决_第3张图片

有问题的:

ServiceImpl层引入Mapper方法失败问题的解决_第4张图片

 这么一对比,发现了吧,有问题这个编译后没有层级缩进,而是以点号并排在前面目录的后面。问题恰恰就出现在这里,原来如果想在resources建立多级,建立完mapper文件夹之后,继续在resources 上面右键新建目录,输入为 mapper/newDir用 / 分开就可以设置多个.而不是在mapper目录上右键新建Directory。

调整后启动终于正常了。

你可能感兴趣的:(springboot,apache,mybatis,java)