相信这个问题,网上有很多类似的问题,不外乎是mapper.xml的文件没有映射到namespace的接口,或者接口名没有和SQL的id相同等等。
但今天遇到了一个特别的坑,费了很长时间,这里特地说一下。
在排除了所有的问题后,最后无意中发现了是spring boot的启动配置文件问题,我是用的yml文件的方式,这里有个特别要注意的地方。
这里先介绍下,yml的配置和一般的properties不同。
properties配置方式,如下:
mybatis.configuration.default-statement-timeout=25000
mybatis.mapper-locations=classpath:mapping/*.xml
yml配置方式,如下:
mybatis:
configuration:
map-underscore-to-camel-case: true
mapper-locations: mybatis/**/*Mapper.xml //这里有一定要和configuration保持平级
可以看出yml采用树形结构,更加简洁,但更容易出错,
因为不加分号,所以层次结构,必须得规规整整,我就是因为将mapper-location和 map-underscore-to-camel-case: true保持平级,成为了configuration的子节点。
所以实际上的配置是 mybatis.configuration.mapper-locations: mybatis/**/*Mapper.xml,自然是配置出现了问题。
而 mapper-locations是应该属于mybatis节点的,这才踩了一个非常容易出现错的地方,一定要牢记。