天天看點

SSM中(Spring-SpringMVC-Mybatis)(一:概念) SpringMVC接口解釋 SpringMVC運作原理

一:Spring:

參照我的另一篇部落格:    http://www.cnblogs.com/GH0522/p/8127530.html

二:SpringMVC:

流程圖:

SSM中(Spring-SpringMVC-Mybatis)(一:概念) SpringMVC接口解釋 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運作原理

  1. 用戶端請求送出到DispatcherServlet
  2. 由DispatcherServlet控制器查詢一個或多個HandlerMapping,找到處理請求的Controller
  3. DispatcherServlet将請求送出到Controller
  4. Controller調用業務邏輯處理後,傳回ModelAndView
  5. DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖
  6. 視圖負責将結果顯示到用戶端
      1. 截獲符合特定格式的URL請求。
      2. 初始化DispatcherServlet上下文對應的WebApplicationContext,并将其與業務層、持久化層的WebApplicationContext建立關聯。
      3. 初始化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之類的,隻有表名和字段名有變化。

歡迎大家一起說出自己的想法。