1. 程式人生 > >【JAVA秒會技術之秒殺面試官】JavaEE常見面試題(六)

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

行處理 周期 3年 struts 處理 isp java對象 date 代碼

62.談一談你對Mybatis的理解?

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

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

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

技術分享圖片

程序員只需要關註sqlsession,即可完成mybatis的編程。

1、 mybatis配置文件

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

b) Mapper.xml,此文件作為mybatis的sql映射文件,文件中配置了操作數據庫的sql語句。此文件需要在SqlMapConfig.xml中加載。

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

3、 通過會話工廠創建sqlSession即會話,程序員通過sqlsession會話接口對數據庫進行增刪改查操作。

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

5、 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的執行過程?

技術分享圖片

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

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

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

4、DispatcherServlet通過HandlerAdapter處理器適配器調用處理器

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

6、Controller執行完成返回ModelAndView

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

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

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

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

11、DispatcherServlet響應用戶

63.SpringMVC與Strus2的區別

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

2、由上邊原因,SpringMVC的方法之間基本上獨立的,獨享request response數據,請求數據通過參數獲取,處理結果通過ModelMap交回給框架,方法之間不共享變量,而Struts2其所有Action變量是共享的,每次請求都會創建一個新的Action,一個Action對象對應一個request上下文。

3、由於Struts2需要針對每個request進行封裝,把request,session等servlet生命周期的變量封裝成一個一個Map,供給每個Action使用,並保證線程安全,所以在原則上,是比較耗費內存的。

4、攔截器實現機制上,Struts2有以自己的interceptor機制,SpringMVC用的是獨立的AOP方式,這樣導致Struts2的配置文件量還是比SpringMVC大。

5、SpringMVC的入口是servlet,而Struts2是filter。

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

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