天天看點

mybatis:mapper.xml不執行的問題

mybatis:mapper不執行的問題

最近幫一個小老弟解決一個小bug。

問題描述:login登入,伺服器不響應。debug執行到mapper調用xml時不執行,且沒有報錯。

問題排錯:

  1. 頁面請求進入了controller,确定是伺服器的問題。
  2. mapper和xml是mybatis generator自動生成的,不存在錯誤。
  3. 檢查兩個主要配置檔案,如下:

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就不行呢?這就引發了另一個思考。