关于:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 错误的几种地方

最近自己新搭建项目 SSM的。搭建好以后总是报错,报错如下:

### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'] with root cause
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

关于:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 错误的几种地方

关于:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 错误的几种地方

看到这个错  首先会想到   是不是 mysql的驱动jar包没有?怎么可能老铁,我可是资深程序员 这种错误我怎么会犯。

然后又怀疑是不是自己DriverClassName写错?然后又一顿百度,我擦 这个我不可能记错啊  当时还在纠结  到底是com.mysql.jdbc.Driver还是com.jdbc.mysql.Driver

妈的,可能只找bug找疯了,在这个上面浪费一点时间,肯定是com.mysql.jdbc.Driver。但是这个我也写对了啊。又一顿找。妈的 找了有2小时,

甚至找到了这个文章中的https://blog.csdn.net/zhaoxiangpeng16/article/details/51025657。

这文章内容是这样的:


使用spring+mybatis时会出现Cannot load JDBC driver class ${jdbc.driverClassName}之类的出错。

 原因是在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。 

解决方案:将

<property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> 

改成<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />



但是我仔细看了配置文件,我不是这个错。我配置是正确的。如下

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <property name="mapperLocations" value="classpath*:com/example/test/mapper/*.xml"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.test.dao"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>


最后实在没办法了,都过去3个小时了,只能一个配置一个的找,最后终于,尼玛发现  打脸了!

看2个图,你们对比下:



发现问题没有???妈的 真的是手残了,我db.properties配置的数据库连接相关的都加了 双引号 。打脸啊  

把双引号去掉就好了。

正确的配置:注意看 都是没有双引号的!

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=root