IDEA+SpringBoot+MyBatis+Maven,因为IDEA而出现的一次错误

1、IDEA中创建mapper.xml文件的包名遇到的坑 

       最近搭建IDEA+SpringBoot+MyBatis+Maven的项目,使用了逆向工程来生成接口和mapper文件。把逆向工程生成的文件拷贝到工程中,项目结构如下:

启动工程,浏览器访问,却报错了:

此时看到后台的控制台也打印了相关的错误:

然后我就百度了一些,大家都有各种各样出现这个问题的情况,主要有:

1、IDEA对xml文件处理的方式不同:mapper.xml文件需要放置在resource这个文件夹下;而eclipse只要mapper接口文件与mapper.xml放置在同一平级目录就行。

2、xml文件的namespace的值和Mapper接口文件的包名不一致。

但是我的问题都不在这里,因为我的xml文件是放到了resources目录下面,并且仔细查看了各个xml文件的namespace都是正确的路径。最终有一个博客提醒了我,原因如下:

在src目录下面,我们如果建包的时候,一般都可以创建多层包,比如:com.zdw.nettychat,这个是没问题的。但是在resources目录下面创建目录时,如果也是一次性创建多级包,那么此时的包名就是com.zdw.nettychat.mapper,这一长串都是包名,这跟我们的application.properties中配置的:

mybatis.mapper-locations=classpath:com/zdw/nettychat/mapper/*.xml

是对不上的,我们是想着找多级包的,这种情况创建的包,不会分级,效果就跟上面截图的一样,是在同一级的。

解决办法:我们每次只创建一级包名,比如要创建com/zdw/nettychat/mapper的目录,那么就应该先创建com(Directory)目录,然后在com下面创建zdw,再在zdw下面创建nettychat,最后在nettychat下面创建mapper,最终创建的包结构是这样的:

 

参考:https://blog.csdn.net/benben513624/article/details/81076182

2、使用逆向工程生成接口和xml文件的坑

上面报的异常解决了之后,我启动项目就报错了,这次报的错是不一样的,大概就是:

Caused by: java.lang.RuntimeException: Error parsing Mapper XML.
 Cause: java.lang.IllegalArgumentException: 
Result Maps collection already contains value for
com.zdw.nettychat.mapper.TbChatRecordMapper.BaseResultMap

这个错误我刚开始都没太注意,一直以为就是之前的mapper.xml文件的原因引起的另一个错误,于是又陷入了上面的死循环中,后来还是百度了一下,找到了答案:

       原因是在使用 mybatis 逆向工程生成代码的时候多次重复生成,导致配置配件多次重复积累,解决办法是把逆向工程里面的代码删除掉,然后再点击运行一次,刷新看到代码即可,然后再拷到新工程里面,这样在运行 web 项目就 ok 了

因为我之前由于报错,所以确实重复执行了多次逆向工程,后来我就删除了逆向工程中已经生成的代码,重新执行,然后拷贝到项目中,启动项目,访问:http://localhost:9000/user/selectAll,就能查询到数据了。

 

参考博客:https://www.2cto.com/kf/201712/706099.html

 

这两个错误都是比较坑的地方,有可能别人不出错,而我就正好碰上了。因此记录下,希望下次遇到的时候能快速反应,也希望其他人看到了这个博客,能帮助你少走一些弯路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值