项目场景:
细心!细心!细心!
问题描述
今天在重写项目的时候遇到一件非常愚蠢至极的错误,故事是这样的,编写全局配置文件sqlMapConfig.xml第一种写法完美运行。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http: //mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--数据库配置,default表示默认采用哪一个数据库环境-->
<environments default="development">
<!--开发环境数据库-->
<environment id="development">
<!--使用JDBC事务管理,事务控制由mybatis-->
<transactionManager type="JDBC"/>
<!--连接池配置,type为POOLED采用连接池-->
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="hellomysql6B"/>
</dataSource>
</environment>
</environments>
<!--包含mapper.xml配置文件-->
<mappers>
<mapper resource="mapper/ProductMapper.xml"/>
</mappers>
</configuration>
当我将数据库连接配置信息独立出来创建db.properties配置文件时,我自信的使用了cv大法,复制完之后时这样的,细心的朋友可能已经发现问题了。
db.properties:
jdbc.driver = "com.mysql.cj.jdbc.Driver"
jdbc.url = "jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"
jdbc.username = "root"
jdbc.password = "hellomysql6B"
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http: //mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<!--数据库配置,default表示默认采用哪一个数据库环境-->
<environments default="development">
<!--开发环境数据库-->
<environment id="development">
<!--使用JDBC事务管理,事务控制由mybatis-->
<transactionManager type="JDBC"/>
<!--连接池配置,type为POOLED采用连接池-->
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="mapper/ProductMapper.xml"/>
</mappers>
</configuration>
原因分析:
此时我去运行测试类,报错信息:(这里只截取造成报错的原因,其它无关紧要的东西不再展示)发现它说我们加载不到数据库的驱动!!!问题来了,到底是哪里的原因?
解决方案:
找了一圈,设置开始怀疑自己数据库驱动版本除了问题,当我打开db.properties时我恍然大悟,痛!太痛了!!!
修改后的db.properties(与之前的对比看看有什么不同)没错,原来的配置文件多了引号
jdbc.driver = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
jdbc.username = root
jdbc.password = hellomysql6B
注意:属性值不用加引号,因为我们 sqlMapConfig.xml 里已经添加了引号,属性相关的只能换行不能空格
补充:当我们再使用mysql8.x及以上版本时需要在url里面添加时区,不然有的情况下也会报错。