1. 程式人生 > >五大框架(springMVC,struts2,spring,mybatis,hibernate)總結摘要

五大框架(springMVC,struts2,spring,mybatis,hibernate)總結摘要

看到這篇文章,感覺不錯,轉載一下,有時間一定單獨針對五大框架進行細聊,對比!

五大框架(springMVC,struts2,spring,mybatis,hibernate)

說說你對springMVC框架的理解?

Springmvc就是spring框架的一個模組,它是一個基於mvc設計思想的前端web層框架,主要作用就是對前端請求進行處理。

完整答案

Springmvc就是spring框架的一個模組,所以它可以和spring框架可以進行無縫整合,它是一個基於mvc設計思想的前端web框架,主要作用就是對前端請求進行處理。他的前端控制器是一個servlet.它的請求攔截是基於方法級別的.他的執行流程是

Spring的MVC框架主要由DispatcherServlet、處理器對映、處理器(控制器)、檢視解析器、檢視組成

1. 客戶端請求提交到DispatcherServlet

2. 由DispatcherServlet控制器查詢一個或多個HandlerMapping,找到處理請求的Controller

3. DispatcherServlet將請求提交到Controller

4. Controller呼叫業務邏輯處理後,返回ModelAndView

5. DispatcherServlet查詢一個或多個ViewResoler檢視解析器,找到ModelAndView指定的檢視

6. 檢視負責將結果顯示到客戶端

備註: 

mvc指的就是Model(業務模型)、View(檢視)、Controller(控制器)

說說你對struts2框架的理解?

Struts2,它是一個基於mvc設計思想的前端web層框架,主要作用就是對前端請求進行處理。他的核心是攔截器.但是他的前端控制器是一個過濾器

完整答案

Struts2,它是一個基於mvc設計思想的前端web層框架,主要作用就是對前端請求進行處理。他的核心是攔截器.但是他的前端控制器是一個過濾器. 它的請求攔截是基於類級別,OGNL也提供了在Struts2裡訪問各種作用域中的資料的簡單方式.大大簡化了獲取資料的程式碼.struts2的執行流程是:

A. 頁面請求傳遞到後臺, 首先進入Struts2 的核心過濾器 StrutsPrepareAndExecutedFilter .

B. 請求進入到struts2 之後, 會根據請求的路徑到 struts.xml 檔案中根據 package的 namespace 屬性 與 action 的 name 屬性配置到請求處理的Action 類.

C. 匹配到對應 Action 類的對應方法 , 執行該方法進行業務處理, 處理完畢之後會返回一個結果檢視(字串).

D. 然後根據返回的結果檢視 , 到struts.xml 中對應的Action的result結果集配置中 匹配 對應的檢視頁面(或action).

E. 然後根據 result 的type屬性, 轉發(或重定向) 對應的頁面(或action).

SpringMVC和Struts2兩個框架對比一下.

注意:兩個技術已經很多年了,技術非常成熟.使用者群體很大.不能片面的用好與不好來說.只能說適合不適合.因為每個東西都有擅長和不擅長

注意:說出幾點即可

1、springmvc入口是一個servlet前端控制器,struts2入口是一個filter過慮器。

2、struts2通過在action類中定義成員變數接收請求引數,struts2只能使用多例模式管理action。

springmvc通過在controller方法中定義形參接收請求引數,springmvc可以使用單例模式管理controller。

3、springmvc是基於方法開發的,註解開發中使用requestMapping將url和方法進行對映,如果根據url找到controller類的方法生成一個Handler處理器物件(只包括一個method)。

struts2是基於類開發,每個請求過來建立一個action例項,例項物件中有若干的方法。

開發中建議使用springmvc,springmvc方法更類似service業務方法。

4、Struts採用值棧儲存請求和響應的資料,通過OGNL存取資料, springmvc通過引數繫結器是將request請求內容解析,並給方法形參賦值。

說說你對spring框架的理解?他的作用是什麼?

Spring的核心有很多.其中比較主要也是我們常用的就是AOP,IOC,DI.也就是面向切面程式設計,控制反轉,依賴注入.Spring一般是作為容器管理其他框架.例如常見的web層框架(struts2,springMVC)和持久成框架(mybatis,hibernate).一般都由spring來管理

完整答案

    (1)aop:面向切面程式設計,將跟業務邏輯沒有關係的程式碼提取出來,在呼叫目標方法之前或者之後執行。常用的場景,事務,日誌,許可權控制,異常處理等方面。

    (2)ioc:建立物件的權利,交給spring容器建立。

    (3)di:如果一個物件A需要使用另一個物件B才能實現某個功能,這時就可以說A物件依賴於B物件,而Spring容器在建立A物件時,會自動將A物件需要的B物件注入到A物件中,此過程就是依賴注入。

核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要元件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程式的配置和依賴性規範與實際的應用程式程式碼分開。

    Spring 上下文:Spring 上下文是一個配置檔案,向 Spring 框架提供上下文資訊。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和排程功能。

    Spring AOP:通過配置管理特性,Spring AOP 模組直接將面向方面的程式設計功能整合到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何物件支援 AOP。Spring AOP 模組為基於 Spring 的應用程式中的物件提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 元件,就可以將宣告性事務管理整合到應用程式中。

    Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫供應商丟擲的錯誤訊息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常程式碼數量(例如開啟和關閉連線)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。

    Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的物件關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。

    Spring Web 模組:Web 上下文模組建立在應用程式上下文模組之上,為基於 Web 的應用程式提供了上下文。所以,Spring 框架支援與 Jakarta Struts 的整合。Web 模組還簡化了處理多部分請求以及將請求引數繫結到域物件的工作。

    Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程式的 MVC 實現。通過策略介面,MVC 框架變成為高度可配置的,MVC 容納了大量檢視技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。

說說你對mybatis框架的理解

Mybatis是一個優秀的ORM框架.應用在持久層. 它對jdbc的 操作資料庫過程 進行封裝,使開發者只需要關注 SQL 本身,而不需要花費精力去處理例如註冊驅動、建立connection、等jdbc繁雜的過程程式碼.一般使用mapper代理的方式開發.直接在xml裡面寫sql(如果對hibernate瞭解.可以話題轉向mybatis和hibernate的對比)

完整答案

Mybatis的工作流程

1、  mybatis配置

SqlMapConfig.xml,此檔案作為mybatis的全域性配置檔案,配置了mybatis的執行環境等資訊。

mapper.xml檔案即sql對映檔案,檔案中配置了操作資料庫的sql語句。此檔案需要在SqlMapConfig.xml中載入。

2、  通過mybatis環境等配置資訊構造SqlSessionFactory即會話工廠

3、  由會話工廠建立sqlSession即會話,操作資料庫需要通過sqlSession(DefaultSqlSession)進行。

4、  mybatis底層自定義了Executor(BaseExecutor)執行器介面操作資料庫,Executor介面有兩個實現,一個是基本執行器、一個是快取執行器。

5、  Mapped Statement也是mybatis一個底層封裝物件,它包裝了mybatis配置資訊及sql對映資訊等。mapper.xml檔案中一個sql對應一個Mapped Statement物件,sql的id即是Mapped statement的id。

6、  Mapped Statement對sql執行輸入引數進行定義,包括HashMap、基本型別、pojo,Executor通過 Mapped Statement在執行sql前將輸入的java物件對映至sql中,輸入引數對映就是jdbc程式設計中對preparedStatement設定引數。

7、  Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本型別、pojo,Executor通過 Mapped Statement在執行sql後將輸出結果對映至java物件中,輸出結果對映過程相當於jdbc程式設計中對結果的解析處理過程。

說說你對hibernate框架的理解

Hibernate是輕量級的持久層解決方案,是一個關係資料庫ORM框架, 對JDBC訪問資料庫的程式碼做了封裝.我們可以很容易的對資料庫進行增刪改查操作.

完整答案

hibernate查詢方式?

    (1)導航物件圖檢索方式。根據已經載入的物件,導航到其他物件。

    (2)OID檢索方式。使用get或者load載入對應的物件

    (3)HQL檢索方式。

    (4)QBC檢索方式。

    (5)SQL檢索方式。

sql與hql的區別?

    (1)sql是直接操作資料庫的

    (2)hql是通過操作物件操作資料庫,對大小寫敏感。

一級快取和二級快取的區別?

    (1)一級快取是session級別的快取,二級快取是sessionFactory級別的快取。

hibernate中get和load的區別?

    get和load都是根據id獲取資料。

    (1)get先查詢session中對應id是否有資料,如果有則直接返回,有查詢資料庫,如資料庫中沒有則返回為null;

    (2)load方式查詢session中對應id是否有資料,如果沒有生成代理物件,查詢資料庫。如沒有對應的id則丟擲異常

Hibernate和mybatis對比

注意:兩個技術已經很多年了,技術非常成熟.使用者群體很大.不能片面的用好與不好來說.只能說適合不適合.因為每個東西都有擅長和不擅長

1. 在移植性方面hibernate配置一下方言即可.而一般情況下mybatis則需要修改sql語句

2. hibernate是一個完全的ORM框架.完全的面向物件.更符合我們開發者的思維模式.mybatis需要我們手動寫sql語句

3. hibernate的優化成本比較高.因為hibernate的sql語句是自動生成的,所以在優化方面一般的新手無從下手.而mybatis只要修改sql就可以了.更加容易上手

(如果對某一個框架非常瞭解.這裡話鋒可以轉向具體的詳細介紹某一個框架)