MyBatis踩坑记录:XML文件DTD部分写错导致MySQL连接不上

 

最近在看一本书:《Spring MVC+MyBatis开发从入门到项目实战》,图书馆里借的,泛泛地翻了一下,觉得可以学,于是就迎来了许多坑~

比如下面这个~

书中第三章 3.1节中的MyBatisFirstDemo这个例子,目的是测试MyBatis连接本地的MySQL并做简单查询,然后返回结果字符串输出到屏幕上。(没有用到Spring MVC)

我跟着书上的示例代码敲了一下,

          

敲完运行,除了LOG4J的一些提示,和书上的输出不一样啊!看这日志,还以为数据库被强制关闭,四舍五入以为数据库服务没启动呢。

DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.

于是我就开始琢磨MySQL了,又是修改root用户的密码,以为像“123456”这种密码在MySQL8里面不符合政策,也没改成,琢磨了一下没结果,晚上就去上课了,心不在焉的。

晚上下课回来又琢磨,把书里面给的网址上的源码下下来运行,比上面的log只多了一行“opening JDBC Connection”,然后几个循环以后程序就停了,头大!

然后,我想着,我对MyEclipse不熟悉,毕竟没用过,然后把这项目里的MySQL JDBC的jar包搬到Intelij IDEA里简单用基本的JDBC语句测了一下,先是不能运行,报错说找不到这个“com.mysql.jdbc.Driver”,网上一查,说是要往项目里添加依赖(dependency)——IDEA导入MySQL的jdbc驱动,并操作数据库,这里还学会了添加依赖~

    

添加完之后依然不行,报错说“Unknown character set index for field '255' received from server.”,百度之后找到了答案——Unknown character set index for field '255' received from server.,是Jar包版本太低了,匹配不上MySQL8,于是更换了Jar包(mysql-connector-java-5.1.46.jar),可以正常运行出结果了!

JDBC与MySQL的问题解决了,然并卵,替换掉MyBatisDemo中的低版本jar包后,程序输出依然没反应,和上面一毛一样,我有点怀疑人生了~但是这个jar包替换掉书中源码的那个项目,就可以正常有SQL的输出,太晚了,于是我睡了。


第二天中午回来一顿反思,看到MyEclipse右下角有个JUnit的日志框,我双击了一下,原来可以放大,之前都是在一个窄框里看log,没太注意,这是一个突破口!!!

说实话,我之前看了好几次这个log,都没有啥体会,毕竟第一次搞MyBatis配置。

这里说mapper必须匹配configuration,我转头一看我写的UserMapper.xml,我的妈,我抄错代码了!!!

不知者无罪,我对XML一无所知,DTD(Document Type Definition)给写错了,以下是我的错误代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="test">
	<select id="findUserById" parameterType="int" 
		resultType="cn.com.mybatis.po.User">
		SELECT * FROM user WHERE id=#{id}
	</select>
</mapper>

而正确的代码是酱婶的,!DOCTYPE这里出了问题,MyBatis不认账了,不给解析了吧

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="test">
	<select id="findUserById" parameterType="int" 
		resultType="cn.com.mybatis.po.User">
		SELECT * FROM user WHERE id=#{id}
	</select>
</mapper>

改了以后,程序当然正常运行啦~

DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 2114874018.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@7e0e6aa2]
DEBUG [main] - ==>  Preparing: SELECT * FROM user WHERE id=? 
DEBUG [main] - ==> Parameters: 2(Integer)
DEBUG [main] - <==      Total: 1
姓名:李四
性别:男
生日:1989-10-13
所在地:河北省邯郸市
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@7e0e6aa2]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@7e0e6aa2]
DEBUG [main] - Returned connection 2114874018 to pool.

希望大家,特别是和我一样的初学者,引以为戒!

这让我以后会更加注意XML配置文件的格式,我学到了!

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值