MyBatis入门踩坑记录
问题说明
学习过程中遇到很多问题,记录一下。
Maven静态资源过滤问题
<!--在build中配置resource,来防止我们资源导出失败的问题--><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>
Junit测试时,可能会提示
org.apache.ibatis.binding.BindingException: Type interface com.melodyhub.dao.UserDao is not known to the MapperRegistry.
MapperRegistry
是什么?
每一个Mapper.xml都需要在MyBatis核心配置文件中注册!!!
<!--每一个Mapper.xml都需要在MyBatis核心配置文件中注册!!!--><mappers> <!--<mapper class="com.melodyhub.dao.UserMapper"/>--> <mapper resource="com/melodyhub/dao/UserMapper.xml"/></mappers>
MySQL时区
由于MySQL底层是使用的时区是CST,跟中国时间相差挣好8个小时。
解决办法是在mybatis-config.xml
中``jdbc的
url`末尾加上,二选一即可:
&serverTimezone=GMT%2B8&useTimezone=true&serverTimezone=UTC
参考:https://blog.csdn.net/ziningyihao/article/details/90644295
MySQL驱动/版本问题
所有的代码都没有问题,但是就是连接不上数据库,经过排查,发现我的MySQL版本是8.0,驱动包是5.1.47,差距太大,不兼容。
将MySQL降级到5.7.29,问题解决。
解决Mybatis报错Could not find resource mybatis-config.xml
下午移植远程仓库项目的时候,控制台报错:
java.io.IOException: Could not find resource mybatis-config.xml
经过排查,发现是我没有一直夫工程的pom.xml文件。
Maven clean
清除缓存,然后build
,即可。
MyBatis问题解决Error building SqlSession.
解决🐤
改为全类名:com.melodyhub.pojo.User
连接JDBC报错:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
问题:
Spring整合Mybatis时候,出现数据库连接异常:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
分析:
找了好半天的原因,最后发现是相关jdbc驱动包版本太低!
解决方法:
下载最新版的mysql-connector-java
即可。
虽然可以连接成功,但是控制台还是提示:
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
修改一下mybatis-config.xml
:
<!--<property name="driver" value="com.mysql.jdbc.Driver"/>--><property name="driver" value="com.mysql.cj.jdbc.Driver"/>
mysql 连接池连接超时的问题(The last packet successfully received from the server was 2,431 milliseconds ago. The last packet sent successfully to the server was 2,417 milliseconds ago.)
org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet successfully received from the server was 2,431 milliseconds ago. The last packet sent successfully to the server was 2,417 milliseconds ago.### The error may exist in com/melodyhub/mapper/UserMapper.xml### The error may involve com.melodyhub.mapper.UserMapper.selectUser### The error occurred while executing a query### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet successfully received from the server was 2,431 milliseconds ago. The last packet sent successfully to the server was 2,417 milliseconds ago. at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
解决:
是mysql超时设置的问题
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接。
在connection url
中加参数: autoReconnect=true
jdbc.url=jdbc:mysql://localhost:3306/database?autoReconnect=true&autoReconnectForPools=true
作者:MelodyJerry
来源链接:https://www.cnblogs.com/melodyjerry/p/13346167.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。