1. 程式人生 > >java知識Servlet與五大框架(Spring,hibernate,mybatis,struts2,SpringMVC)總結

java知識Servlet與五大框架(Spring,hibernate,mybatis,struts2,SpringMVC)總結

----------------------JDBC部分----------------------------

JDBC工作原理主要分3個步驟:1、載入資料庫驅動。2、獲取資料庫連線。3、傳送sql語句訪問資料庫 

1、載入資料驅動:使用Class.forName方法,呼叫這個方法會載入資料庫驅動com.mysql.jdbc.driver。 

關於資料庫驅動的理解,其實是sun公司給了一個Driver的介面,然後各個資料廠商根據自己的資料庫 

來實現這個介面。當要訪問資料庫的時候,需要引入這個第三方類庫。類的載入主要分為5個部分, 

載入、驗證、準備、解析、初始化。在初始化的部分用到了DriverManager.registerDriver()方法,將 

自己註冊給DriverManager的Driver介面。這個地方體現了多型。這個時候就可以使用Driver了。 

2、獲取資料庫連線DriverManager.getConnection()。這個方法主要呼叫driver的connect()方法 

返回一個實現了Connection介面的物件。 

3、然後利用Connection物件建立Statement,傳送sql語句訪問資料庫。

4、訪問結束關閉資源

JDBC幾個步驟:

1,使用jdbc程式設計需要連線資料庫,註冊驅動和資料庫資訊

2,操作Connection,開啟Statement物件

3,通過Statement物件執行SQL,返回結果到ResultSet物件

4,使用ResultSet讀取資料,然後通過程式碼轉化為具體的POJO物件

5,關閉資料庫相關的資源

jdbc的缺點:

一:工作量比較大,需要連線,然後處理jdbc底層事務,處理資料型別,還需要操作Connection,Statement物件和ResultSet物件去拿資料並關閉他們。

二:我們對jdbc程式設計可能產生的異常進行捕捉處理並正確關閉資源

由於JDBC存在的缺陷,在實際工作中我們很少直接使用jdbc進行程式設計,用的更多的是ORM物件關係模型來操作資料庫,Hibernate就是一個ORM模型

Hibernate是建立在若干POJO通過xml對映檔案(或註解)提供的規則對映到資料庫表上的。我們可以通過POJO直接操作資料庫的資料,他提供的是一種全表對映的模型。相對而言,Hibernate對JDBC的封裝程度還是比較高的,我們已經不需要寫SQL,只要使用HQL語言就可以了。

-----------------------Struts1、Struts2和springmvc比較------------------------------

1、都是web層框架。

2、Struts1是基於servlet;Struts2是基於filter;springmvc是基於servlet 。

3、Struts1的action是單例模式,執行緒不安全的;Struts2 action是原型模式 prototype,每次訪問物件都會建立新的例項,保證執行緒安全性;springmvc controller是單例模式,整個程式只有一個物件例項。Spring的安全性是通過繫結threadlocal實現。

4、Struts1使用JSTL EL表示式,但是對集合和索引屬性的支援很弱。Struts2採用 OGNL。 struts2是類級別的攔截, 一個類對應一個request上下文,springmvc是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應。

5、Strust1中通常以action訪問時.do,struts2、spring mvc 都是以.action做結尾。

6、spring3 mvc可以認為已經100%零配置了。

----------JDBC程式設計有哪些不足之處,MyBatis是如何解決這些問題的-----------------

① 資料庫連結建立、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用資料庫連結池可解決此問題。

解決:在SqlMapConfig.xml中配置資料鏈接池,使用連線池管理資料庫連結。

② Sql語句寫在程式碼中造成程式碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java程式碼。

解決:將Sql語句配置在XXXXmapper.xml檔案中與java程式碼分離。

③ 向sql語句傳引數麻煩,因為sql語句的where條件不一定,可能多也可能少,佔位符需要和引數一一對應。

解決: Mybatis自動將java物件對映至sql語句。

④ 對結果集解析麻煩,sql變化導致解析程式碼變化,且解析前需要遍歷,如果能將資料庫記錄封裝成pojo物件解析比較方便。

解決:Mybatis自動將sql執行結果對映至java物件。

----------------------SpringMVC與Struts2的主要區別?----------------------------

①springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。

②springmvc是基於方法開發,傳遞引數是通過方法形參,可以設計為單例或多例(建議單例),struts2是基於類開發,傳遞引數是通過類的屬性,只能設計為多例。 

③Struts採用值棧儲存請求和響應的資料,通過OGNL存取資料, springmvc通過引數解析器是將request物件內容進行解析成方法形參,將響應資料和頁面封裝成ModelAndView物件,最後又將模型資料通過request物件傳輸到頁面。 Jsp檢視解析器預設使用jstl。

----------------------Servlet與Struts2的主要區別?----------------------------

共同點:都是MVC框架;

不同點:

1、servlet要在web.xml配置,struts2需要web.xml配置過濾器;

2、servlet不能分xml檔案,struts2可以;

3、servlet需要依賴容器,httprequest,httprespones必須有容器才能初始化。action完全與容器鬆耦合。

4、request.getParameter()得到servlet頁面的值,action可以用屬性驅動,模型驅動獲取。

5、servlet不利於團隊開發,struts2有利於團隊開發;

6、servlet沒攔截器,struts2用攔截器;

7、servlet要麼轉發要麼重定向;struts2可以自定義結果集;

8、servlet的控制器是servlet,struts2的控制器是action;

----------------------MyBatis與Hibernate有哪些不同----------------------------

  Mybatis和hibernate不同,它不完全是一個ORM框架,因為MyBatis需要程式設計師自己編寫Sql語句,不過mybatis可以通過XML或註解方式靈活配置要執行的sql語句,並將java物件和sql語句對映生成最終執行的sql,最後將sql執行的結果再對映生成java物件。 

    Mybatis學習門檻低,簡單易學,程式設計師直接編寫原生態sql,可嚴格控制sql執行效能,靈活度高,非常適合對關係資料模型要求不高的軟體開發,例如網際網路軟體、企業運營類軟體等,因為這類軟體需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是mybatis無法做到資料庫無關性,如果需要實現支援多種資料庫的軟體則需要自定義多套sql對映檔案,工作量大。 

    Hibernate物件/關係對映能力強,資料庫無關性好,對於關係模型要求高的軟體(例如需求固定的定製化軟體)如果用hibernate開發可以節省很多程式碼,提高效率。但是Hibernate的缺點是學習門檻高,要精通門檻更高,而且怎麼設計O/R對映,在效能和物件模型之間如何權衡,以及怎樣用好Hibernate需要具有很強的經驗和能力才行。 

總之,按照使用者的需求在有限的資源環境下只要能做出維護性、擴充套件性良好的軟體架構都是好架構,所以框架只有適合才是最好。

---------------------jdbc,mybatis,hibernate的區別----------------------------

1)從層次上看,JDBC是較底層的持久層操作方式,而Hibernate和MyBatis都是在JDBC的基礎上進行了封裝使其更加方便程式設計師對持久層的操作。

2)從功能上看,JDBC就是簡單的建立資料庫連線,然後建立statement,將sql語句傳給statement去執行,如果是有返回結果的查詢語句,會將查詢結果放到ResultSet物件中,通過對ResultSet物件的遍歷操作來獲取資料;Hibernate是將資料庫中的資料表對映為持久層的Java物件,對sql語句進行修改和優化比較困難;MyBatis是將sql語句中的輸入引數和輸出引數對映為java物件,sql修改和優化比較方便.

3)從使用上看,如果進行底層程式設計,而且對效能要求極高的話,應該採用JDBC的方式;如果要對資料庫進行完整性控制的話建議使用Hibernate;如果要靈活使用sql語句的話建議採用MyBatis框架。