我的工程目录如下
启动类mapper接口扫描
@SpringBootApplication
@MapperScan("com.eoffice.mapper") //mapper interface scanner
public class EofficeApplication {
public static void main(String[] args) {
SpringApplication.run(EofficeApplication.class, args);
}
}
yml配置mapper-location
#yml文件配置mapper xml路径
mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
搜寻网上其他博客,得到排查错误的几个要点
- 比较mapper.xml 里面的 namespace与mapper接口实际类路径是否一致
- 比较mapper接口的方法名称和mapper.xml里面的标签id的值是否一致
- 构建失败,查看target文件夹下面是否存在mapper xml 文件,没有请重新构建
经过检查,我发现前面三点,项目中都没有出错。
最后想到了mapperscan以及yml中的location可能会出错。 同时排除掉mapperscan,因为如果mapperscan出错,那么项目启动的时候就会报bean找不到的错误(service层依赖于mapper接口)例如下面
@Service
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService {
@Autowired
private AdminMapper adminMapper;
//...省略掉其他业务代码
}
于是排查yml中的location, 在yml中输入mybatis.mapper-locations后,编译器会提示有两个选择,一个是mybatis,另一个是mybatis-plus。
考虑到项目使用了mybatis-plus,于是选择mybatis-plus.mapper-locations后,重启项目后,错误得到了解决。
更改后yml配置如下
#config mybatis plus log impl (show sql), and mapper-locations
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mybatis/mapper/*.xml