搭建ssm框架出現的問題
以前寫專案,總是在別人搭建好的專案基礎上開發,很多基礎的東西並不是很明白,這次自己搭建了一個ssm專案,搭建專案的過程這裡就不做贅述,網上有很多教程.只是把我自己搭建專案過程中遇到的問題整理如下:
一.配置檔案.此前我也看過網上很多ssm配置檔案的教程,一般而言分為兩種情況.
1)一種是嚴格按照ssm框架,spring,springmvc,mybatis和web.xml組成配置檔案.
2)一種是將spring和springmvc合併成一個檔案,mybatis和web.xml各自不變.
兩種配置實際意義上並沒有什麼不同,但是我覺得第一種更符合邏輯意義,三個配置檔案對應s,s,m,對於我這種對框架不熟悉的人來說比較容易理解.
下面是我參考的一個部落格,附上鍊接,
https://www.cnblogs.com/dong-dong-1/p/8724127.html
這位博主是按照嚴格的分層來寫的,但是我按照博主的思路搭建過程中遇到了一個問題:
博主在springmvc的配置檔案中只掃描controller的相關注解,在spring的配置檔案中只掃描除controller之外的其他註解,這種方式遵守了分層思想,但我在按照這種方式啟動後報錯顯示找不到相關的controller類.目前尚未找到原因,只是找到了折中的解決辦法,我將兩個掃描合併為一個,放入spring的配置檔案中,如下:
<context:component-scan base-package="mysite" />
mysite代表的是dao類,model類,controller類,service介面和實現類所在的包名.
然後在啟動專案的時候,我又遇到了一個bug,報錯如下:
Invalid bound statement (not found)
其中下面這位博主總結的比較全面.
https://www.cnblogs.com/liaojie970/p/8034525.html
而我出現問題的原因有兩個:
1)在mapper.xml檔案中的namespace 將名字寫錯,它應該對應同名的mapper介面的路徑名.
2)配置沒有寫全,我當時只是掃描了xml檔案所在包,沒有掃描mapper介面所在包,寫全後的配置如圖:
二.程式碼配置註解.
為了符合開發邏輯,我將程式碼分為model,dao,service,serviceimpl,controller這幾類,model即實體類,dao就是mapper介面,service是業務層的介面,實際上dao和service的主體程式碼一樣,只是在邏輯上有分層(當前個人理解,如有不妥,請指正),serviceimpl是service的實現類.下面是遇到的幾個問題.
1.在我所寫的專案中,類上的註解需要兩個,一個是@service,一個是@controller
2.service註解要寫在serviceimpl上,而不是介面中,如圖,
3.在controller中注入介面時要如下寫法:
其中@Autowired是將其他類作為屬性注入到controller中的註解,也可以使用@Resource,兩者功能一樣. 下面一定要注意:
注入的是實現類,但是用介面實現,體現了多型的思想.