浅谈Springboot下引入mybatis遇到的坑点

 更新时间:2021年08月02日 09:52:02   作者:Hester_WJ  
这篇文章主要介绍了Springboot下引入mybatis遇到的坑点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一、 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 + MybatisPlus

pom中需要修改包

这里写图片描述

我用同样的原理,准备在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”。

这里写图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mybatis-plus常见的坑@TableField不生效问题

    Mybatis-plus常见的坑@TableField不生效问题

    这篇文章主要介绍了Mybatis-plus常见的坑@TableField不生效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java返回json请求中文变成问号的问题及解决

    java返回json请求中文变成问号的问题及解决

    这篇文章主要介绍了java返回json请求中文变成问号的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Java中Object类的理解和使用

    Java中Object类的理解和使用

    Object类是java.lang包下的核心类,Object类是所有类的父类,何一个类时候如果没有明确的继承一个父类的话,那么它就是Object的子类,本文将通过代码示例详细介绍一下Java中Object类的理解和使用,需要的朋友可以参考下
    2023-06-06
  • 为什么在重写 equals方法的同时必须重写 hashcode方法

    为什么在重写 equals方法的同时必须重写 hashcode方法

    Object 类是所有类的父类,其 equals 方法比较的是两个对象的引用指向的地址,hashcode 是一个本地方法,返回的是对象地址值。他们都是通过比较地址来比较对象是否相等的
    2016-07-07
  • SpringBoot中使用JdbcTemplate访问Oracle数据库的案例详解

    SpringBoot中使用JdbcTemplate访问Oracle数据库的案例详解

    JdbcTemplate是Spring框架中的一个核心类,用于简化Java应用程序与关系型数据库的交互操作,本文给大家介绍SpringBoot中使用JdbcTemplate访问Oracle数据库的方法,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • String类型传递是值传递,char[]类型传递是引用传递的实现

    String类型传递是值传递,char[]类型传递是引用传递的实现

    下面小编就为大家带来一篇String类型传递是值传递,char[]类型传递是引用传递的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看不
    2016-09-09
  • Java软件设计模式之桥接模式详解

    Java软件设计模式之桥接模式详解

    这篇文章主要介绍了Java软件设计模式之桥接模式详解,桥接模式也叫做桥梁模式,结构型设计模式的一种,顾名思义,就是用来连接两个部分,为被分离了的抽象部分和实现部分搭桥,需要的朋友可以参考下
    2023-07-07
  • Java导出CSV文件的方法

    Java导出CSV文件的方法

    这篇文章主要为大家详细介绍了Java导出CSV文件的方法,分页查询大数据量,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • Spring Boot实现发送邮件

    Spring Boot实现发送邮件

    这篇文章主要为大家详细介绍了Spring Boot实现发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Lombok的@Data等注解无效的解决

    Lombok的@Data等注解无效的解决

    这篇文章主要介绍了Lombok的@Data等注解无效的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论