SSM框架的一些常見問題
SSM常見問題?
mybatis
1.mybatis中#{}和${}的區別?
1.1 #{}會將引數轉換為字串(String)形式進行處理,${}不會,${}會以原格式進行處理1.2 #{}會進行預編譯,可以有效的防止sql注入,而${}不會
1.3 在排序(order by)的時候使用${}
1.4 在可以使用#{}時不要使用${}
2.mybatis開發環境搭建
2.1 匯入mybatis相關jar包2.2 編寫mybatis-config.xml配置檔案
2.3 編寫mybatis的sql對映檔案
2.4 執行測試
3.mybatis多引數入參有哪幾種方式?
有4種方式3.1 直接傳參
3.2 使用陣列方式傳參
3.3 使用Map集合的方式傳參
3.4 使用註解(@Param)的方式傳參
4.mybatis 動態sql
4.2 where 當它遇到AND或者OR這些就去除AND或者OR
4.3 trim 可以靈活的去除多餘的關鍵字
4.4 set 解決動態更新語句
4.5 foreach 迴圈遍歷,迴圈的物件當然主要是java容器和陣列
4.6 choose choose通常和when一起用相當於Java裡的switch
5.mybatis優缺點
mybatis優點:5.1 與JDBC相比,減少了50%以上的程式碼量。
5.2 MyBatis是最簡單的持久化框架,小巧並且簡單易學。
5.3 MyBatis相當靈活,不會對應用程式或者資料庫的現有設計強加任何影響,SQL寫在XML裡,從程式程式碼中徹底分離,降低耦合度,便於統一管理和優化,並可重用。
5.4 提供XML標籤,支援編寫動態SQL語句。
5.5 提供對映標籤,支援物件與資料庫的ORM欄位關係對映。
mybatis缺點:
5.1 SQL語句的編寫工作量較大,尤其是欄位多、關聯表多時,更是如此,對開發人員編寫SQL語句的功底有一定要求。
5.2 SQL語句依賴於資料庫,導致資料庫移植性差,不能隨意更換資料庫。
6.mybatis和hibernate的區別?
難易度
Hibernate的真正掌握要比Mybatis困難,Hibernate比mybatis更加重量級一些。
Mybatis框架相對簡單很容易上手,但也相對簡陋些。
開發工作量
Mybatis需要我們手動編寫SQL語句,迴歸最原始的方式,所以可以按需求指定查詢的欄位,提高程式的查詢效率。
Hibernate也可以自己寫SQL語句來指定需要查詢的欄位,但這樣破壞了Hibernate封裝以及簡潔性。
資料庫移植性
Mybatis由於所有SQL都是依賴資料庫書寫的,所以擴充套件性,遷移性比較差。
Hibernate與資料庫具體的關聯都在XML中,所以HQL對具體是用什麼資料庫並不是很關心。
快取機制對比
相同點
Hibernate和Mybatis的二級快取除了採用系統預設的快取機制外,都可以通過實現你自己的快取或為其他第三方快取方案,建立介面卡來完全覆蓋快取行為。
不同點
Hibernate的二級快取配置在SessionFactory生成的配置檔案中進行詳細配置,然後再在具體的表-物件對映中配置是那種快取。
MyBatis的二級快取配置都是在每個具體的表-物件對映中進行詳細配置,這樣針對不同的表可以自定義不同的快取機制。並且Mybatis可以在名稱空間中共享相同的快取配置和例項,通過Cache-ref來實現。
兩者比較
因為Hibernate對查詢物件有著良好的管理機制,使用者無需關心SQL。所以在使用二級快取時如果出現髒資料,系統會報出錯誤並提示。而MyBatis在這一方面,使用二級快取時需要特別小心。
如果不能完全確定資料更新操作的波及範圍,避免Cache的盲目使用。否則,髒資料的出現會給系統的正常執行帶來很大的隱患。
兩者對比總結
兩者相同點
Hibernate與MyBatis都可以是通過SessionFactoryBuider由XML配置檔案生成SessionFactory,然後由SessionFactory 生成Session,最後由Session來開啟執行事務和SQL語句。其中SessionFactoryBuider,SessionFactory,Session的生命週期都是差不多的
Spring
1.請談談你對Spring兩大核心元件的理解。(IOC/DI、AOP)
IOC:中文名(控制反轉/依賴注入),可以看成是類例項的注入。(比如在action類裡引用service層的類例項。之所以叫控制反轉,是因為
原來要引用service中的類例項,要在action類裡去通過關鍵字new,去新建一個service例項。這個新建的控制權在action類。spring的IOC
則是把新建service類例項的權利給了spring容器(通過註解的方式))。
AOP:
1.概念介紹:所謂AOP,即Aspect orientied program,就是面向方面的程式設計,
2.解釋什麼是方面:貫穿到系統的各個模組中的系統一個功能就是一個方面,
比如,記錄日誌,統一異常處理,事務處理,全限檢查,這些功能都是軟體系統
的一個面,而不是一點,在各個模組中都要出現。
3.什麼是面向方面程式設計:把系統的一個方面的功能封裝成物件的形式來處理
4.怎麼進行面向方面程式設計:把功能模組對應的物件作為切面嵌入到原來的各個系統模組中,
採用代理技術,代理會呼叫目標,同時把切面功能的程式碼(物件)加入進來,所以,
用spring配置代理物件時只要要配兩個屬性,分別表示目標和切面物件(Advisor)。
2.IOC的實現方式以及引數注入方式
2.1 通過設值(setter)注入2.2 通過構造方法的注入
2.3 使用P名稱空間進行注入
3.設值注入和構造注入的區別
設值注入:1.與傳統的JavaBean的寫法更相似,程式開發人員更容易理解、接受。通過setter方法設定依賴關係顯得更加直觀、自然。
2.對於複雜的依賴關係,如果採用構造注入,會導致構造器過於臃腫,難以閱讀。Spring在建立Bean例項時,需要同時例項化其依賴的全部例項,因而導致效能下降。而是用設定注入可以避免這些問題。
3.尤其在某些屬性可選的情況下,多引數的構造器更加笨重
構造注入:
1.構造注入可以再構造器中決定依賴關係的注入順序,有限依賴的優先注入。例如,元件中其它依賴關係的注入,常常需要依賴於Datasource的注入。採用構造注入,可以在程式碼中清晰地決定注入順序。
2.對於依賴關係無需變化的Bean,構造注入更加有用。因為沒有setter方法,所有的依賴關係全部在構造器內設定。因此,無需擔心後續程式碼對依賴關係的破壞。
3.依賴關係只能在構造器中設定,則只有組建的建立者才能改變組建的依賴關係。隊組建的呼叫者而言,元件內部的依賴關係完全透明,更符合高內聚的原則。
4.AOP的原理是什麼,實現AOP的方式有哪些?如何實現?
AOP原理:在不改變原始碼的基礎上新增新的功能實現AOP的方式:
1.利用代理模式動態的實現AOP,從具體的技術細節又可以分為靜態代理,動態代理,CGLIB生成子類代理。
AspectJ屬於靜態AOP,是在編譯時進行增強,會在編譯的時候將AOP邏輯織入到程式碼中,需要專有的編譯器和織入器。
優點:被織入的類效能不受影響。
缺點:不夠靈活
2.使用預編譯的方法靜態進行代理。
Java從1.3引入動態代理。實現原理是為被代理的業務介面生成代理類,將AOP邏輯寫入到代理類中,在執行時動態織入AOP,使用反射執行織入的邏輯。 主要實現方式依賴java.lang.reflect包下的InvocationHandler和Proxy類。
優點:Java標準庫原生支援,使用簡單,無需引用額外的包。相對於靜態AOP更靈活。
缺點:帶代理的類必須是介面,靈活性受到一些限制;使用反射會影響一些效能
3.使用自定義載入器的方法動態進行代理。
可以考慮javassist來實現。Javassist 是一個編輯位元組碼的框架,可以讓你很簡單地操作位元組碼。它可以在執行期定義或修改Class。使用Javassist實現AOP的原理是在位元組碼載入前直接修改需要切入的方法。
優點:可以對絕大部分類織入。
缺點:如果用到了其他類載入器,則這些類將不被織入
5.Spring宣告式事務實現有哪些方式?如何使用註解實現Spring事務?
實現方式共有兩種:編碼方式;宣告式事務管理方式。實現註解Spring事務
1. 必須引入Aop相關的jar檔案
2. bean.xml中指定註解方式實現宣告式事務管理以及應用的事務管理器類
3. 在需要新增事務控制的地方,寫上: @Transactional
@Transactional註解:
1. 應用事務的註解
2. 定義到方法上: 當前方法應用spring的宣告式事務
3. 定義到類上: 當前類的所有的方法都應用Spring宣告式事務管理;
4. 定義到父類上: 當執行父類的方法時候應用事務。
6.bean的作用域有哪些?之間有什麼區別?
Spring的 bean有5種作用域分別是:singleton、prototype、request、session和globalSession作用域包括:
singleton:全域性只有一個例項
prototype:每次呼叫產生一個新的例項
request:每次請求產生一個bean
session:每個使用者session可以產生一個新的bean,不同使用者之間的bean互相不影響
globalSession:作用和session類似,只是使用portlet的時候使用。
SpringMVC
1.請描述SpringMVC的請求處理流程
1、客戶端發出一個http請求給web伺服器,web伺服器對http請求進行解析,如果匹配DispatcherServlet的請求對映路徑(在web.xml中指定),web容器將請求轉交給DispatcherServlet.
2、DipatcherServlet接收到這個請求之後將根據請求的資訊(包括URL、Http方法、請求報文頭和請求引數Cookie等)
以及HandlerMapping的配置找到處理請求的處理器(Handler)。
3-4、DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler(Handler將具體的處理進行封裝),
再由具體的HandlerAdapter對Handler進行具體的呼叫。
5、Handler對資料處理完成以後將返回一個ModelAndView()物件給DispatcherServlet。
6、Handler返回的ModelAndView()只是一個邏輯檢視並不是一個正式的檢視,DispatcherSevlet通過ViewResolver將邏輯檢視轉化為真正的檢視View。
7、Dispatcher通過model解析出ModelAndView()中的引數進行解析最終展現出完整的view並返回給客戶端。
2.SpringMVC如何進行引數傳遞?
使用Model Map<key,value> HttpRequest3.SpringMVC中Controller為何採用單例模式設計?
1、為了效能。2、不需要多例
4.如何進行靜態資源處理?
啟用Tomcat的defaultServlet來處理靜態檔案<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
5.如何處理SpringMVC異常?
(1)使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver;(2)實現Spring的異常處理介面HandlerExceptionResolver 自定義自己的異常處理器;
(3)使用@ExceptionHandler註解實現異常處理
6.如何配置SpringMVC多檢視,實現以html、json、xml三種方式進行展示。
1、首先在springmvc配置檔案中加入相關配置2、需要匯入spring jar包 spring-oxm-3.2.0.RELEASE.jar
3、我們在Controller中給jsp頁面返回一個物件
4、當我們訪問 multiView.json 時,jsp會把該物件轉換成json格式。訪問mutiView.xml時同理
7.SpringMVC如何實現檔案上傳。
1.新增相關jar包2.配置MultipartResolver
3.編寫檔案上傳表單頁
4.編寫控制器
5.優化檔案上傳表單提示
6.部署執行
8.SpringMVC攔截器
1.首先我們需要引入jar包2.配置web.xml
3.配置一個處理器controller
4.定義大配置applicationContext.xml
5.執行
9.SpringMVC和struts2的區別?
一、框架機制我們知道Struts2採用Filter實現,而SpringMVC則採用Servlet實現。
Struts2使用StrutsPrepareAndExecuteFilter,而SpringMVC使用DispatcherServlet。Filter是一種特殊的Servlet。Filter在容器啟動之後即初始化;服務停止以後墜毀,晚於Servlet。Servlet在是在呼叫時初始化,先於Filter呼叫;服務停止後墜毀。
二、攔截機制
1、Struts2
Struts2框架是類級別的攔截,每次請求就會建立一個Action,和spring整合時Struts2的Action Bean注入作用域是原型模式prototype(否則會出現執行緒併發問題),然後通過setter,getter吧request資料注入到屬性。
Struts2中,一個Action對應一個request,response上下文,在接收引數時,可以通過屬性接收,這說明屬性引數是讓多個方法共享的。
2、SpringMVC
SpringMVC是方法級別的攔截,一個方法對應一個Request上下文,所以方法直接基本上是獨立的,獨享request,response資料。而每個方法同時又何一個url對應,引數的傳遞是直接注入到方法中的,是方法所獨有的。處理結果通過ModeMap返回給框架。
在Spring整合時,SpringMVC的Controller Bean預設單例模式Singleton,所以預設對所有的請求,只會建立一個Controller,有應為沒有共享的屬性,所以是執行緒安全的,如果要改變預設的作用域,需要新增@Scope註解修改
3 Struts2有自己的攔截Interceptor機制,SpringMVC這是用的是獨立的Aop方式。
三、效能方面
SpringMVC實現了零配置,由於SpringMVC基於方法的攔截,有載入一次單例模式bean注入。而Struts2是類級別的攔截,每次請求對應例項一個新的Action,需要載入所有的屬性值注入,所以決定了SpringMVC更加快於Struts2。
10.過濾器和攔截器的區別?
攔截器與過濾器的區別 :1. 攔截器是基於java的反射機制的,而過濾器是基於函式回撥。
2. 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
3. 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
4. 攔截器可以訪問action上下文、值棧裡的物件,而過濾器不能訪問。
5. 在action的生命週期中,攔截器可以多次被呼叫,而過濾器只能在容器初始化時被呼叫一次
11.說說你所瞭解的設計模式有哪些?
1.單例模式(singleton)2.簡單工廠(StaticFactory Method)
3.工廠方法(Factory Method)和抽象工廠(Abstract Factory)
4.代理模式(Proxy)
5.命令模式(Command)
6. 策略模式(Strategy)
7.門面模式(Facade)
8.橋接模式(Bridge)
9.觀察者模式(Observer)
12.SpringMVC中常用的註解有哪些?分別是什麼作用?
[email protected]Controller控制器是通過服務介面定義的提供訪問應用程式的一種行為,它解釋使用者的輸入,將其轉換成一個模型然後將試圖呈獻給用
[email protected]
我們可以 @RequestMapping 註解將類似 “/favsoft”這樣的URL對映到整個類或特定的處理方法上。
[email protected]
可以使用 @PathVariable 註解方法引數並將其繫結到URI模板變數的值上。
[email protected]
equestParam將請求的引數繫結到方法中的引數上
[email protected]
@RequestBody是指方法引數應該被繫結到HTTP請求Body上。
[email protected]
@ResponseBody與@RequestBody類似,它的作用是將返回型別直接輸入到HTTP response body中。
[email protected]
@ModelAttribute可以作用在方法或方法引數上,當它作用在方法上時,標明該方法的目的是新增一個或多個模型屬性(model attributes)。
13.Spring整合mybatis/SSM框架的整合
2.1匯入相關jar包Spring:spring-beans.jar、spring-expression.jar、spring-core.jar、spring-context.jar、
spring-aop.jar、aopalliance-1.0.jar、aspectjweaver-1.6.9.jar
SpringMVC:spring-web.jar、spring-webmvc.jar
MyBatis:mybatis.jar
Spring-Mybatis:mybatis-spring.jar
commons-dbcp.jar、commons-pool.jar
spring-jdbc.jar、spring-tx.jar
Logging:commons-logging.jar、log4j.jar
資料庫驅動jar包:mysql-connecter.jar
2.2編寫配置檔案
mybatis-config.xml(settings、typeAliases)
applicationContext.xml(整合mybatis)
springmvc-servlet.xml(配置Controller)
web.xml(SpringMVC核心控制器、Spring、過濾器)
log4j.properties
database.properties
2.3編寫程式程式碼
pojo-dao-service-controller-view
2.4執行測試
相關推薦
Mybatis框架一些常見異常
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 提示無效的繫結的方式(對映錯誤)(沒有找到那個findAll 的方法) 原因:出在了配置檔案上,
ssm框架整合常見錯誤
雖然三大框架特別特別的好用,但是,當我第一次把這三個框架用maven整合到一起的時候,各種錯誤接踵而至,下面來做一下三大框架整合的總結: 首先是在匯入三大框架的各種依賴包的時候,因為我用的是j2ee ecilpse,所以要匯入j2ee的依賴包,現在
SSM框架的一些常見問題
SSM常見問題?mybatis1.mybatis中#{}和${}的區別?1.1 #{}會將引數轉換為字串(String)形式進行處理,${}不會,${}會以原格式進行處理1.2 #{}會進行預編譯,可以有效的防止sql注入,而${}不會1.3 在排序(order by)的時候
ssm框架出現的常見問題
http sdn tail tex service 允許 顯示 exceptio net 1:自己寫的代碼測試的時候顯示用戶過期,需要釋放攔截器,並配置權限允許 2:Servlet.service() for servlet [springmvc] in context w
最近整理的一些常見的面試題,面試大全,黑馬程式設計師面試寶典題庫---框架--篇
框架(評論留言獲取原件) 一、 SpringMVC 1. SpringMVC 的工作原理 a. 使用者向伺服器傳送請求,請求被 springMVC 前端控制器 DispatchServlet 捕獲; b. DispatcherServle 對請求 URL 進行解析,得到請求資源
記錄手寫一次ssm框架遇到的一些坑之注入失敗
由於沒有實現單例或者說再contrllerMap和iocMap中實現同一個類兩個物件,導致僅僅注入其中一個物件的坑 簡介 檔案目錄結構 出現的問題 簡介 最近一直在嘗試實現一個自己的ssm框架,前斷時間已經分別實現了mvc 和
Flask框架中常見的一些問題
1. 如何指定接收多個HTTP請求方法? 我們只需要在寫路由時,在路由名後加上一個引數methods,即用列表將你可能使用的方法加入即可。 @app.route('/login/', methods=['GET', 'POST']) 2. 如何判斷使用者請求的HTTP方法? 需
整合SSM框架時用到的一些依賴
1.整合Spring MVC模組環境(一個依賴spring-webmvc) <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId&
關於ssh框架和ssm框架的一些理解
首先接觸到的是用ssm框架實現對資料庫中的資料進行增刪改查,增是將使用者填寫的一張收據表單中的資料新增到資料庫中,刪是將不正確的資料刪除,改是將某個不正確的資料進行更改,查是查詢收據填寫的答案以及已填寫的收據。 ssm框架是springMVC、spring、Myba
java SSM 框架 多數據源 代碼生成器 websocket即時通訊 shiro redis 後臺框架源碼
sql編輯器 quartz 自定義表單 SSM springmvc 獲取【下載地址】 QQ: 313596790 官網 http://www.fhadmin.org/ A 調用攝像頭拍照,自定義裁剪編輯頭像,頭像圖片色度調節 B 集成代碼生成器 [正反雙向](單表、主表、明細
java SSM 框架 代碼生成器 websocket 即時通訊 shiro redis 多數據源 後臺框架源碼
idt 下載到本地 exp 綁定 鏈接 數據庫連接池 展示 地圖工具 重排序 A 調用攝像頭拍照,自定義裁剪編輯頭像,頭像圖片色度調節B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,
java企業站源碼 響應式 兼容手機平板PC 主流SSM 框架 freemaker 靜態引擎
oom bsp dxf col 我們 前後臺 ext 欄目 family java 企業網站源碼 前後臺都有 靜態模版引擎, 代碼生成器大大提高開發效率 前臺: 支持三套模版, 可以在後臺切換 系統介紹: 1.網站後臺采用主流的 SSM 框架 jsp JSTL,網站後臺采
java SSM框架 多數據源 代碼生成器 websocket即時通訊 shiro redis 後臺框架源碼
sql編輯器 quartz 自定義表單 springmvc ssm 獲取【下載地址】 QQ: 313596790官網 http://www.fhadmin.org/A 調用攝像頭拍照,自定義裁剪編輯頭像,頭像圖片色度調節B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速
solr中的一些常見錯誤
pri port java.net data ror lec net jdb exc (1)Caused by: java.lang.ClassNotFoundException: Unable to load jdbcDataSource or org.apache.so
一些常見html css遇到的問題
手型 logs ie6 str 垂直居中 問題 strong point gif 1、讓容器內文字不管是單行還是多行始終垂直居中 解決:css無法直接控制,用js實現 2、IE上超鏈接使用絕對定位後失效 解決辦法:(1)使用position:relative而不是pos
Python中集合(set)的基本操作以及一些常見的用法
python set 集合 集合的一些常見用法 Python除了List、Tuple、Dict等常用數據類型外,還有一種數據類型叫做集合(set),集合的最大特點是:集合裏邊的元素是不可重復的並且集合內的元素還是無序的,所以一般情況下集合常用的兩個場景是:1.去重(如:列表去重);2.關
SSM框架Spring+SpringMVC+MyBatis——詳細整合教程
servle aps files framework l數據庫 建立 blank onf pin 摘要: 包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的... 摘要:
性能測試的一些常見術語
請求 內存 設計 數據庫事務 對象 獲得 jms 應用服務 才會 響應時間我把“響應時間”的概念確定為“對請求作出響應所需要的時間”,把響應時間作`為用戶視角的軟件性能的主要體現。響應時間劃分為“呈現時間”和“系統響應時間”兩個部分。其中“呈現時間”取決於數據在被客戶端
SSM框架整合
logs xdp 提交 ros post提交數據 log htm get http 收集的資料 http://www.cnblogs.com/codeRose/p/6617578.html 1.http://www.cnblogs.com/verlen11/p/5349
java 一款可以與ssm框架完美整合的web報表控件
cnblogs clas tar req pap 整合 大型 自定義報表 環境 碩正套件運行於客戶端(瀏覽器),與應用服務器(Application Server)技術無關,所以能完全用於J2EE、 ASP.Net、php等技術開發的Web應用產品中。 碩正套件部署