【JAVA秒會技術之秒殺面試官】JavaEE常見面試題(六)

【前言】別人都在你看不到的地方暗自努力,在你看獲得的地方,他們也和你同樣顯得不務正業,和你同樣會抱怨,而只有你本身相信這些都是真的,最後,也只有你一我的繼續不思進取 ……  前端

【下載】我的結合諸多資料,總結的一些JavaEE常見面試題,主要針對初/中級程序員想要word完整版下載的,評論裏留言留下你的郵箱!java

62.談一談你對Mybatis的理解?程序員

MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,而且更名爲MyBatis。2013年11月遷移到Github。面試

MyBatis是一個優秀的持久層框架,它對使用jdbc操做數據庫的過程進行封裝,使開發者只須要關注SQL 自己,而不須要花費精力去處理例如註冊驅動、建立connection、建立statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。sql

Mybatis經過xml或註解的方式將要執行的各類statement(statement、preparedStatemnt、CallableStatement)配置起來,並經過java對象和statement中的sql進行映射生成最終執行的sql語句,最後由mybatis框架執行sql並將結果映射成java對象並返回。數據庫

 

      程序員只須要關注sqlsession,便可完成mybatis的編程。apache

一、 mybatis配置文件編程

a) SqlMapConfig.xml,此文件做爲mybatis的全局配置文件,配置了mybatis的運行環境等信息。後端

b) Mapper.xml,此文件做爲mybatis的sql映射文件,文件中配置了操做數據庫的sql語句。此文件須要在SqlMapConfig.xml中加載緩存

二、 經過mybatis環境等配置信息構造SqlSessionFactory,即會話工廠。

三、 經過會話工廠建立sqlSession即會話,程序員經過sqlsession會話接口對數據庫進行增刪改查操做。

四、 mybatis底層自定義了Executor執行器接口來具體操做數據庫,Executor接口有兩個實現,一個是基本執行器(默認)、一個是緩存執行器,sqlsession底層是經過executor接口操做數據庫的

五、 Mapped Statement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息sql映射信息等。mapper.xml文件中一個select\insert\update\delete標籤對應一個Mapped Statement對象,select\insert\update\delete標籤的id便是Mapped statement的id。

a) Mapped Statement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo,Executor經過Mapped Statement在執行sql前將輸入的java對象映射至sql中,輸入參數映射就是jdbc編程中對preparedStatement設置參數。

Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo,Executor經過Mapped Statement在執行sql後將輸出結果映射至java對象中,輸出結果映射過程至關於jdbc編程中對結果的解析處理過程。

62.SpringMVC的執行過程?

 

一、用戶發送請求至前端控制器DispatcherServlet

二、DispatcherServlet收到請求調用HandlerMapping處理器映射器。

三、處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(若是有則生成)一併返回給DispatcherServlet。

四、DispatcherServlet經過HandlerAdapter處理器適配器調用處理器

五、HandlerAdapter執行處理器(handler,也叫後端控制器)。

六、Controller執行完成返回ModelAndView

七、HandlerAdapter將handler執行結果ModelAndView返回給DispatcherServlet

八、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器

九、ViewReslover解析後返回具體View對象

十、DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。

十一、DispatcherServlet響應用戶

63.SpringMVC與Strus2的區別

一、Struts2是類級別的攔截, 一個類對應一個request上下文,SpringMVC是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應,因此說從架構自己上SpringMVC就容易實現restful風格。

二、由上邊緣由,SpringMVC的方法之間基本上獨立的,獨享request response數據,請求數據經過參數獲取,處理結果經過ModelMap交回給框架,方法之間不共享變量,而Struts2其全部Action變量是共享的,每次請求都會建立一個新的Action,一個Action對象對應一個request上下文
三、因爲Struts2須要針對每一個request進行封裝,把request,session等servlet生命週期的變量封裝成一個一個Map,供給每一個Action使用,並保證線程安全,因此在原則上,是比較耗費內存的

四、攔截器實現機制上,Struts2有以本身的interceptor機制,SpringMVC用的是獨立的AOP方式,這樣致使Struts2的配置文件量仍是比SpringMVC大。

五、SpringMVC的入口是servlet,而Struts2是filter

六、SpringMVC集成了Ajax,使用很是方便,只需一個註解@ResponseBody就能夠實現,而後直接返回響應文本便可,而Struts2攔截器集成了Ajax,在Action中處理時通常必須安裝插件或者本身寫代碼集成進去,使用起來也相對不方便。

相關文章
相關標籤/搜索