一:Spring:
參照我的另一篇部落格: http://www.cnblogs.com/GH0522/p/8127530.html
二:SpringMVC:
流程圖:

SpringMVC接口解釋
DispatcherServlet:
Spring提供的前端控制器,所有的請求都有經過它來統一分發。在DispatcherServlet将請求分發給Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具體的Controller。
能夠完成客戶請求到Controller映射。
需要為并發使用者處理上述請求,是以實作Controller接口時,必須保證線程安全并且可重用。
Controller将處理使用者請求,這和Struts
Action扮演的角色是一緻的。一旦Controller處理完使用者請求,則傳回ModelAndView對象給DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和視圖(View)。
從宏觀角度考慮,DispatcherServlet是整個Web應用的控制器;從微觀考慮,Controller是單個Http請求處理過程中的控制器,而ModelAndView是Http請求過程中傳回的模型(Model)和視圖(View)。
Spring提供的視圖解析器(ViewResolver)在Web應用中查找View對象,進而将相應結果渲染給客戶。
SpringMVC運作原理
- 用戶端請求送出到DispatcherServlet
- 由DispatcherServlet控制器查詢一個或多個HandlerMapping,找到處理請求的Controller
- DispatcherServlet将請求送出到Controller
- Controller調用業務邏輯處理後,傳回ModelAndView
- DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖
- 視圖負責将結果顯示到用戶端
-
-
- 截獲符合特定格式的URL請求。
- 初始化DispatcherServlet上下文對應的WebApplicationContext,并将其與業務層、持久化層的WebApplicationContext建立關聯。
- 初始化Spring MVC的各個組成元件,并裝配到DispatcherServlet中。
-
三:mybatis
MyBatis 是支援定制化 SQL、存儲過程以及進階映射的優秀的持久層架構。MyBatis 避免了幾乎所有的 JDBC 代碼和手工設定參數以及抽取結果集。MyBatis 使用簡單的 XML 或注解來配置和映射基本體,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成資料庫中的記錄。
1:使用連接配接池,datasource,在驅動并連接配接的這個過程中優化并解耦
JDBC第一步其實從效率角度來看是不合适的,因為無論什麼資料庫都不可能支撐随機和龐大的連接配接數,而且不可避免的存在連接配接浪費的情況,Mybatis就封裝了這些優化的方法。
2:統一sql存取到XML
如果代碼寫在java塊中,在團隊合作中很可能出現兩個交叉業務的代碼使用類似的sql語句,而開發人員的工作本身沒有交集,那就代表sql語句肯定是無法複用的。而且對sql的修改,就代表着對java檔案的修改,需要重新編譯和打包部署(比如常見的狀态值更改,sql修改随着業務變化必然存在修改)。
mybatis将sql統一存取到xml中,就算存在業務交叉,但因為統一配置的緣故,sql在xml中一目了然,兩個跨team的程式員可以看到對方的sql,來判斷自己是否需要重用。并且使用xml配置可以減少代碼編譯。
還有就是在java中拼寫長sql太惡心了。
3:參數和結果集映射
sql的方式需要傳入參數,如果存在多條件“或類型”的查詢(清單查詢的查詢條件允許空),那就代表你必須傳參進行sql拼接,就算使用xml的方式也不行。要麼每個業務獨立配置xml中的sql,要麼還是寫入java代碼中,或者以工具的方式進行自動拼接。
Mybatis使用映射的方式,友善model管理參數,同時以解析器的方式将參數動态拼接到sql(sqlmaper裡那些标簽),由于是model映射,連查詢結果都可以統一映射,友善取出和運算。而且mybatis對查詢結果集進行了緩存處理,使得重複查詢進一步進行了優化。
4:對多重複sql進行複用封裝
比如模闆方法,将常用sql子產品化,直接調用。比如通用的save和getID之類的,隻有表名和字段名有變化。
歡迎大家一起說出自己的想法。