浅谈Springboot下引入mybatis遇到的坑点
配置完成后,访问数据库遇到的问题
首先出现这个问题,肯定是xml文件与mapper接口没有匹配上,甚至是xml文件根本没有被扫描到。
于是会从配置上进行检查:1、 xml中的namespace命名是否与mapper接口路径一致,需保证一致。
2、 application.properties或者application.yml文件中配置mybatis的属性对否,如下:
第一行 typeAliasesPackage是实体类的包路径;
第二行mapperLocations:是Mapper的xml文件存放的位置,当xml文件跟对应的Mapper接口处于同一位置的时候可以不用指定
该属性的值。
3、 启动类上加注解,如下:
推荐用这种方式扫描Mapper接口,另一种方式是在每一个mapper接口类上加注解
注意,上述两种方式,必须有一种实现,不然无法启动项目,会报mapper接口未注入,如下:
综上,只要上面几种情况都配置正确,一般就可以正常启动,并访问数据库。
二、 springBoot + MybatisPluspom中需要修改包
我用同样的原理,准备在springBoot中引入mybatisPlus,但是配置都检查了,依旧报类似的错误:
于是根据报错的信息,究其源码:1、 首先由于mybatis通过mapper接口来invoke具体的方法实现,其查询的key是接口包名加方法名,如果找不到该key,就会报错,具体代码如下:
只有在configuration中找到了匹配的key,才会返回key对应的MappedStatement; 同样调用selectById,可看到一下结果,能够找到。很明显而由于上面的selectById1方法是自定义实现的,其xml未被扫描到,还是配置的问题。
然后,再看源码,为何configuration中找不到自定义的mapper方法,配置哪里有问题:
MybatisPlusAutoConfiguration是在启动时,自动会读取配置信息的,可以看到其中MybatisPlusProperties类型定义了前缀mybatis-plus,即只有前缀为mybatis-plus的配置信息才会被加载,而再看配置文件,如下,恍然大悟,mybatis的配置前缀写错了,修改成mybatis-plus,成功了!!!
后来发现,原来这跟开头pom文件中导入的包版本有关系,
总结如下:若使用的是mybatis,则要导入的包是下面这个,并且配置文件中mybatis的配置前缀是“mybatis”。
而若使用的是mybatis-plus,则需要导入的包是下图,并且配置中mybatis的配置前缀是“mybatis-plus”。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持好吧啦网。
相关文章:
1. Android webview注入JS代码 修改网页内容操作2. Docker容器如何更新打包并上传到阿里云3. CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chrome、Opera4. IntelliJ IDEA 报错:找不到包或者找不到符号的问题及解决方案5. IntelliJ IDEA创建web项目的方法6. Java实现简单通讯录管理系统7. chat.asp聊天程序的编写方法8. Java程序员使用的20几个大数据工具9. IntelliJ IDEA导入项目的方法10. 详解php中implode explode serialize json msgpack性能对比