最近做SSM項目,在編寫完login方法后,運行測試就發生錯誤。
報錯如下:
Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'Minli'@'localhost' (using password: YES)
根據提示,應該是Mysql的用戶名和密碼錯誤導致的問題,查看database配置文件,也沒有發現問題。
database配置文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/hotel
username=root
password=root
然后查看了一下Dao接口:
1 package cn.hotel.dao; 2 3 import cn.hotel.entity.User; 4 import org.apache.ibatis.annotations.Param; 5 6 import java.util.List; 7 8 public interface UserDao { 9 public User login(@Param("username") String username, @Param("password") String password, @Param("status") Integer status); 10 11 public Integer add(User user); 12 13 public Integer update(User user); 14 15 public User getUserById(Integer id); 16 17 public List<User> getAllUser(); 18 }
很尋常的CRUD,應該不至於出現問題。
然后查看了Spring的配置文件,關於dataSource的配置是這樣的:
1 <context:property-placeholder location="classpath:database.properties"/> 2 3 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 4 <property name="driverClassName" value="${driver}"/> 5 <property name="url" value="${url}"/> 6 <property name="username" value="${username}"/> 7 <property name="password" value="${password}"/> 8 </bean>
一直這樣使用也沒有問題。但是忽然發現一點,在配置文件中Mybatis的命名和@Param中參數的命名都是一致的,會不會是這個原因導致的呢。
於是修改database配置文件:
database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/hotel
database.username=root
database.password=root
修改Spring配置文件dataSource部分:
<context:property-placeholder location="classpath:database.properties"/> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${database.driver}"/> <property name="url" value="${database.url}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> </bean>
問題得到解決!
總結:
在使用Mybatis帶@Param參數注解功能時,要避免名稱和數據庫配置文件對應的字段名稱相同,否則就會出現無法連接數據庫的情況。