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