我是用到了maven项目,整合ssm框架,同时运用了mybatis逆向工程
这个问题真的困扰我了好久!!!!网上的方法大都是Mapper interface和xml文件的定义对应不上,需要检查包名,namespace,函数名称等能否对应上。在我一遍一遍仔细的对照之后,发现我的这些接口以及包名等等并没有错误。。。接下来就是艰难的解决过程:
问题一:
此时我发现了,根据mybatis逆向工程创建的bean实体类和数据库的有些属性名对应不上,比如Department实体类属性是id,数据库的是dept_id,明显这是不可行的。所以这时候我就在连接数据库的url上添加了属性nullCatalogMeansCurrent=true,把所有文件涉及到的连接数据库的url都加上了以上属性。
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm_mycrud?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true
有人可能会想为什么要拼接这么长的字符串,其实我也不太清楚,可能是和我的mysql版本是8.0的有关吧,用此版本可以能会出现一些异常,具体可以看这篇文章。
https://blog.csdn.net/weixin_40845165/article/details/84140606
问题二:
在我解决了逆向工程生成实体类的属性名对应不上的问题后,发现还是运行不了!!还是出现这个错误。。。。这个错误的意思大概是找不到此mapper文件吧,因为此时target文件下也没看到这些mapper文件,此时只需要在pom.xml中添加此段代码。
<resource>
<directory>src/main/resources</directory>
<includes>
<include>mapper/*Mapper.xml</include>
<include>*.xml</include>
<include>*.properties</include>
</includes>
</resource>
因为我的目录是把mapper文件夹放在resoures下,如果没有此段代码,是找不到mapper.xml文件在哪里的。
至于是什么原因造成的,以下文字段复制了其他博主的说法
https://www.cnblogs.com/hzdzkjdxygz/p/8149658.html
原因是:maven默认会把src/main/resources下的所有配置文件以及src/main/java下的所有java文件打包或发布到target\classes下面,但是现实我们可能会在src/main/java下面也放置一些配置文件如hibernate配置文件或mybatis mapper配置文件等,如果不做一些额外配置,那我们打包后的项目可能找不到这些必须的资源文件,因此在pom.xml中增加类似如下配置,这样就会将src/main/java下的xml文件随同java编译后的class文件一同copy到相应的class目录。