一、你本身以前的項目開發中, 所涉及的技術棧有哪些?html
二、springMVC的流程是什麼?主要組件說明?SpringMVC的優勢?前端
首先,咱們得說出每一個組件是作什麼的,固然要每一個單詞讀出來最好。DispatcherServlet:web
spring mvc的入口,整個框架運行就是在這個servlet中完成。spring
HandlerMapping:處理器映射起。用於映射每一個處理方法對應的請求路徑。是一個map結構<url,method>。sql
handler:處理器。實際上就是控制器中的每一個處理方法。數據庫
HandlerAdapter:處理器適配器。專門用來調用handler,由於在spring mvc中每一個處理方法參數以及返回類型都不同,所以須要用適配器來適配。json
ViewResovler:視圖解析器。用於指定視圖技術,以及視圖技術相關的配置。api
View:視圖。springmvc 中支持多種視圖,除了jsp外 還有xml,json,pdf等。tomcat
1.清晰的角色劃分:控制器(controller)、驗證器(validator)、命令對象(command obect)、表單對象(form object)、模型對象(model object)、Servlet分發器(DispatcherServlet)、處理器映射(handler mapping)、試圖解析器(view resoler)等等。每個角色均可以由一個專門的對象來實現。安全
2.強大而直接的配置方式:將框架類和應用程序類都能做爲JavaBean配置,支持跨多個context的引用,例如,在web控制器中對業務對象和驗證器validator)的引用。
3.可適配、非侵入:能夠根據不一樣的應用場景,選擇何事的控制器子類(simple型、command型、from型、wizard型、multi-action型或者自定義),而不是一個單一控制器(好比Action/ActionForm)繼承。
4.可重用的業務代碼:可使用現有的業務對象做爲命令或表單對象,而不須要去擴展某個特定框架的基類。
5.可定製的綁定(binding)和驗證(validation):好比將類型不匹配做爲應用級的驗證錯誤,這能夠保證錯誤的值。再好比本地化的日期和數字綁定等等。在其餘某些框架中,你只能使用字符串表單對象,須要手動解析它並轉換到業務對象。
6.可定製的handler mapping和view resolution:Spring提供從最簡單的URL映射,到複雜的、專用的定製策略。與某些web MVC框架強制開發人員使用單一特定技術相比,Spring顯得更加靈活。
7.靈活的model轉換:在Springweb框架中,使用基於Map的鍵/值對來達到輕易的與各類視圖技術集成。
8.可定製的本地化和主題(theme)解析:支持在JSP中可選擇地使用Spring標籤庫、支持JSTL、支持Velocity(不須要額外的中間層)等等。
9.簡單而強大的JSP標籤庫(Spring Tag Library):支持包括諸如數據綁定和主題(theme)之類的許多功能。他提供在標記方面的最大靈活性。
10.JSP表單標籤庫:在Spring2.0中引入的表單標籤庫,使用在JSP編寫表單更加容易。
11.Spring Bean的生命週期:能夠被限制在當前的HTTp Request或者HTTp Session。準確的說,這並不是Spring MVC框架自己特性,而應歸屬於Spring MVC使用的WebApplicationContext容器。
三、mybatis 的 #和$ 的區別是什麼?
#{}是sql的參數佔位符,Mybatis會將sql中的#{}替換爲?號,在sql執行前會使用PreparedStatement的參數設置方法,按序給sql的?號佔位符設置參數值
mybatis 在對 sql 語句進行預編譯以前,會對 sql 進行動態解析,解析爲一個 BoundSql 對象,也是在此處對動態 SQL 進行處理的。在動態 SQL 解析階段, #{ } 和 ${ } 會有不一樣的表現
#{} 在動態解析的時候, 會解析成一個參數標記符。select * from user where name = ?;
${}在動態解析的時候,會將咱們傳入的參數當作String字符串填充到咱們的語句中,select * from user where name = 「dato」; 預編譯以前的 SQL 語句已經不包含變量了,徹底已是常量數據了。
${ } 變量的替換階段是在動態 SQL 解析階段,而 #{ }變量的替換是在 DBMS (數據庫管理系統)中。
#方式可以很大程度防止sql注入,$方式沒法防止Sql注入。
$方式通常用於傳入數據庫對象,例如傳入表名.
http://www.javashuo.com/article/p-ypnucozp-gt.html
1,下降了組件之間的耦合性,實現了軟件各層之間的解耦。
2,可使用容器提供的衆多服務,如事務管理,消息服務等。
3,容器提供單例模式支持。
4,容器提供了AOP技術,利用它能夠很容易實現一些攔截,如權限攔截,運行期監控等。
5,容器提供了衆多的輔助類,可以加快應用的開發。
6,spring對於主流的應用框架提供了很好的支持,例如mybatis等。
7,spring屬於低入侵式設計。
8,獨立於各類應用服務器。
9,spring的DI機制下降了業務對象替換的複雜性。
10,spring的高度開放性,並不強制應用徹底依賴於它,開發者能夠自由選擇spring的部分或者所有。
spring的缺點:
使用了大量的反射機制,反射機制很是佔用內存。
SpringBoot不是Spring官方的框架模式,而是一個團隊在Spring4.0版本上二次開發並開源公佈出來的。簡而言之,SpringBoot就是一個輕量級,簡化配置和開發流程的web整合框架。SpringBoot是最近這幾年才火起來的,那麼它到底與Spring有啥區別呢?想了解區別,其實就是SpringBoot提供了哪些特性:
Spring Boot能夠創建獨立的Spring應用程序;內嵌瞭如Tomcat,Jetty和Undertow這樣的容器,也就是說能夠直接跑起來,用不着再作部署工做了;無需再像Spring那樣搞一堆繁瑣的xml文件的配置;能夠自動配置Spring。SpringBoot將原有的XML配置改成Java配置,將bean注入改成使用註解注入的方式(@Autowire),並將多個xml、properties配置濃縮在一個appliaction.yml配置文件中。提供了一些現有的功能,如量度工具,表單數據驗證以及一些外部配置這樣的一些第三方功能;整合經常使用依賴(開發庫,例如spring-webmvc、jackson-json、validation-api和tomcat等),提供的POM能夠簡化Maven的配置。當咱們引入核心依賴時,SpringBoot會自引入其餘依賴。