springboot整合Mybatis出现的玄学问题

前言

  最近使用springboot+mybatis创建了一个项目试着玩一玩,结果就出现了玄学问题。我觉得有必要记录下来。第一个就是 @MapperScan()注解失效 ,第二个就是在service里注入mapper居然报红。第三个就是配置实体类的包IDEA居然不识别,具体情况下面再说。

过程

  项目的创建没有什么问题,如今springboot都已经出到2.2.5版本了,我就稍稍往前,用一用2.1.7版本。首先,去掉tomcat,加上undertow,然后直接启动,发现失败了,一看报错,这意思似乎是没有连接数据库,我记得搁以前,好像不用数据库连接就能启动,也不知道是不是我记错了。
  配置好数据库,启动,没毛病,完美运行。然后就是使用mybatis来试一试,也没什么好配置的,就是一个实体类包名,mapper.xml文件位置,这都没啥。接下来就是写mapper接口,写service。然后我也是看别人的,这叫优雅的整合mybatis,使用@MappperScan注解,告诉springboot有关mapper的接口都在这里面。
  可是,万万没想到,我一启动,它告诉我,在这个包里没有扫描到mapper。这不是搞笑呢,怎么会找不到呢。后来,我灵机一动,不用@MapperScan注解,在mapper接口上写@mapper注解,这样就能正常启动了。
  但是吧我不知道怎么就发现了,service里注入的mapper报红,虽然它不影响运行,但是我看着就是很不舒服,于是,我就找各种解决办法,发现还是网友神通广大,确实有解决办法,比如我搜的前几条都是选择将IDEA的提示error级别降低,变成warning级别,我总感觉这种不好,就继续找解决办法,没想到还真有看起来更靠谱的解决办法。
  有这么几种解决办法:

  1. 使@Autowired注解允许null,即 @Autowired(required = false).
  2. 使用构造器的方式注入。
  3. 使用 @Resource

  当然,还有的大神说安装mybatis plugins就行,一装就好,但是我找不到这个插件,只找到了Free mybatis plugins,而且这个似乎不行。我倒是比较相中这个第三种,简单,好使。

玄学出现了

  在我搜索上述问题的时候,神奇的事情发生了,@MapperScan这个注解又好使了。这是个极其神奇的事情。我记得,我刚开始是@MapperScan(“com.xxx”)这样写,不好使,我又这样写@MapperScan(basePackages = “com.xxx”),它就行了,好使了。然后我又把basePackages去掉,居然还能用,没有什么区别,这就很疑惑了,我来来回回换了几遍,都没有问题。这真是让我摸不着头脑。也不知道下次会出现什么玄学。
  还有就是理论上当我在application.yml文件中

mybatis:
  type-aliases-package: com.xiumu.model.entity

一旦配置完这个,那么我在mapper.xml文件中parameterType属性只需要写实体类名就可以。但是吧,IDEA表示拒绝,写实体类名就是要标红。插入,查询确实没有什么问题。但是吧,看着这个标红实在是不得劲。开发时间比较紧,我就先不管它了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值