mybatis:mapper不執行的問題
最近幫一個小老弟解決一個小bug。
問題描述:login登入,伺服器不響應。debug執行到mapper調用xml時不執行,且沒有報錯。
問題排錯:
- 頁面請求進入了controller,确定是伺服器的問題。
- mapper和xml是mybatis generator自動生成的,不存在錯誤。
- 檢查兩個主要配置檔案,如下:
spring-bean.xml
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${dataSource.username}"></property>
<property name="password" value="${dataSource.password}"></property>
<property name="url" value="${dataSource.url}"></property>
<property name="driverClassName" value="${dataSource.driver}"></property>
</bean>
db.properties
dataSource.username=root
dataSource.password=root
dataSource.url=jdbc:mysql://192.168.137.3:3306/test
dataSource.driver=com.mysql.jdbc.Driver
檢查一遍,沒有任何問題。然後我把自己的配置copy進去,發現程式正常執行了。可知是配置檔案出了差錯。
我配置檔案如下:
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${datasource.username}"></property>
<property name="password" value="${datasource.password}"></property>
<property name="url" value="${datasource.url}"></property>
<property name="driverClassName" value="${datasource.driver}"></property>
</bean>
datasource.username=root
datasource.password=root
datasource.url=jdbc:mysql://192.168.137.3:3306/test
datasource.driver=com.mysql.jdbc.Driver
經過仔細對比發現:datasource和dataSource,一個S大寫,一個s小寫。然而bean中引用db中的key,如果兩邊一緻按理說是沒有任何問題的,這也是第一遍檢查配置檔案沒有找到問題的原因。但實際上通過測試,發現datasource小寫的,程式執行沒有問題;dataSource大寫,程式執行mapper就會卡主。
最後解決方案,當然是bean和db檔案,datasource都改成 小寫就好了。但是為什麼兩個配置檔案都用dataSource就不行呢?這就引發了另一個思考。