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框架。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章