溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

2020年去一線大廠面試先過SSM框架源碼這一關(guān)!

發(fā)布時(shí)間:2020-04-03 20:57:10 來源:網(wǎng)絡(luò) 閱讀:800 作者:架構(gòu)師追風(fēng) 欄目:編程語言

SSM框架介紹

(1)持久層(Mybatis):Dao層(mapper)

DAO層:DAO層主要是做數(shù)據(jù)持久層的工作,負(fù)責(zé)與數(shù)據(jù)庫進(jìn)行聯(lián)絡(luò)的一些任務(wù)都封裝在此。

DAO層的設(shè)計(jì)首先是設(shè)計(jì)DAO的接口。

然后在Spring的配置文件中定義此接口的實(shí)現(xiàn)類。

然后就可在模塊中調(diào)用此接口來進(jìn)行數(shù)據(jù)業(yè)務(wù)的處理,而不用關(guān)心此接口的具體實(shí)現(xiàn)類是哪個(gè)類,顯得結(jié)構(gòu)非常清晰。

DAO層的數(shù)據(jù)源配置,以及有關(guān)數(shù)據(jù)庫連接的參數(shù)都在Spring的配置文件中進(jìn)行配置。

(2)業(yè)務(wù)層(Spring):Service層

Service層:Service層主要負(fù)責(zé)業(yè)務(wù)模塊的邏輯應(yīng)用設(shè)計(jì)。

首先設(shè)計(jì)接口,再設(shè)計(jì)其實(shí)現(xiàn)的類。

接著再在Spring的配置文件中配置其實(shí)現(xiàn)的關(guān)聯(lián)。這樣我們就可以在應(yīng)用中調(diào)用Service接口來進(jìn)行業(yè)務(wù)處理。

Service層的業(yè)務(wù)實(shí)現(xiàn),具體要調(diào)用到已定義的DAO層的接口。

封裝Service層的業(yè)務(wù)邏輯有利于通用的業(yè)務(wù)邏輯的獨(dú)立性和重復(fù)利用性,程序顯得非常簡潔。

(3)表現(xiàn)層(springMVC):Controller層(Handler層)

Controller層:Controller層負(fù)責(zé)具體的業(yè)務(wù)模塊流程的控制。

在此層里面要調(diào)用Service層的接口來控制業(yè)務(wù)流程。

控制的配置也同樣是在Spring的配置文件里面進(jìn)行,針對具體的業(yè)務(wù)流程,會(huì)有不同的控制器,我們具體的設(shè)計(jì)過程中可以將流程進(jìn)行抽象歸納,設(shè)計(jì)出可以重復(fù)利用的子單元流程模塊,這樣不僅使程序結(jié)構(gòu)變得清晰,也大大減少了代碼量。

(4)視圖層:View層

View層:View層與控制層結(jié)合比較緊密,需要二者結(jié)合起來協(xié)同工發(fā)。View層主要負(fù)責(zé)前臺(tái)jsp頁面的表示。

2020年去一線大廠面試先過SSM框架源碼這一關(guān)!

關(guān)于框架源碼的大體知識(shí)總結(jié)了一個(gè)思維導(dǎo)圖分享給大家

2020年去一線大廠面試先過SSM框架源碼這一關(guān)!


SSM框架面試題

1、如何理解Spring?

2、介紹一下Spring的事物管理

3 、SSM優(yōu)缺點(diǎn)、使用場景?

4、MyBatis 中使用#和$書寫占位符有什么區(qū)別?

5、解釋一下 MyBatis 中命名空間(namespace)的作用。

6、什么是 IoC 和 DI?DI 是如何實(shí)現(xiàn)的?

7、解釋一下什么叫 AOP(面向切面編程)?

8、你是如何理解"橫切關(guān)注"這個(gè)概念的?

9、你如何理解 AOP 中的連接點(diǎn)(Joinpoint)、切點(diǎn)(Pointcut)、增強(qiáng)(Advice)、引介(Introduction)、織入(Weaving)、切面(Aspect)這些概念?

10、Spring 支持的事務(wù)管理類型有哪些?你在項(xiàng)目中使用哪種方式?

11、Spring MVC的工作原理是怎樣的?

12、什么是 XSS 攻ji?

13、SQL 注入攻ji?

14、什么是CSRF攻ji?

15、簡述Mybatis一級(jí)、二級(jí)緩存

16、JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?

2020年去一線大廠面試先過SSM框架源碼這一關(guān)!


SSM框架面試題解析

1、如何理解Spring?

具體來說Spring是一個(gè)輕量級(jí)的容器,用于管理業(yè)務(wù)相關(guān)對象的。核心功能主要為:IOC,AOP,MVC。

IOC:控制反轉(zhuǎn),將對象的創(chuàng)建過程交給容器,讓容器管理對象的生命周期如創(chuàng)建,初始化,銷毀等。

AOP:面向切面編程,對關(guān)注點(diǎn)進(jìn)行模塊化,通過對某一功能點(diǎn)進(jìn)行編程,比如記錄日志,有很多個(gè)類都需要記錄日志的方法,則創(chuàng)建記錄日志的代理方法,需要調(diào)用該功能是只需要調(diào)用代理方法,這就是AOP。

MVC:SpringMvc,Spring提供的基于MVC模式設(shè)計(jì)的Web框架,如今比較流行的框架之一。

2、介紹一下Spring的事物管理

事務(wù)就是對一系列的數(shù)據(jù)庫操作(比如插入多條數(shù)據(jù))進(jìn)行統(tǒng)一的提交或回滾操作,如果插入成功,那么一起成功,如果中間有一條出現(xiàn)異常,那么回滾之前的所有操作。這樣可以防止出現(xiàn)臟數(shù)據(jù),防止數(shù)據(jù)庫數(shù)據(jù)出現(xiàn)問題。

開發(fā)中為了避免這種情況一般都會(huì)進(jìn)行事務(wù)管理。Spring中也有自己的事務(wù)管理機(jī)制,一般是使用TransactionMananger進(jìn)行管 理,可以通過Spring的注入來完成此功能。

Spring支持如下兩種方式的事務(wù)管理:

編程式事務(wù)管理:這意味著你可以通過編程的方式管理事務(wù),這種方式帶來了很大的靈活性,但很難維護(hù)。

聲明式事務(wù)管理:這種方式意味著你可以將事務(wù)管理和業(yè)務(wù)代碼分離。你只需要通過注解或者XML配置管理事務(wù)。

一般選擇聲明式事務(wù)管理,因?yàn)檫@種方式和應(yīng)用程序的關(guān)聯(lián)較少。

3 、SSM優(yōu)缺點(diǎn)、使用場景?

(1)Mybatis和hibernate不同,它不完全是一個(gè)ORM框架,因?yàn)镸yBatis需要程序員自己編寫Sql語句,不過mybatis可以通過XML或注解方式靈活配置要運(yùn)行的sql語句,并將java對象和sql語句映射生成最終執(zhí)行的sql,最后將sql執(zhí)行的結(jié)果再映射生成java對象。

(2)Mybatis學(xué)習(xí)門檻低,簡單易學(xué),程序員直接編寫原生態(tài)sql,可嚴(yán)格控制sql執(zhí)行性能,靈活度高,非常適合對關(guān)系數(shù)據(jù)模型要求不高的軟件開發(fā),例如互聯(lián)網(wǎng)軟件、企業(yè)運(yùn)營類軟件等,因?yàn)檫@類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是mybatis無法做到數(shù)據(jù)庫無關(guān)性,如果需要實(shí)現(xiàn)支持多種數(shù)據(jù)庫的軟件則需要自定義多套sql映射文件,工作量大。

(3)Hibernate對象/關(guān)系映射能力強(qiáng),數(shù)據(jù)庫無關(guān)性好,對于關(guān)系模型要求高的軟件(例如需求固定的定制化軟件)如果用hibernate開發(fā)可以節(jié)省很多代碼,提高效率。但是Hibernate的學(xué)習(xí)門檻高,要精通門檻更高,而且怎么設(shè)計(jì)O/R映射,在性能和對象模型之間如何權(quán)衡,以及怎樣用好Hibernate需要具有很強(qiáng)的經(jīng)驗(yàn)和能力才行。

(4)總之,按照用戶的需求在有限的資源環(huán)境下只要能做出維護(hù)性、擴(kuò)展性良好的軟件架構(gòu)都是好架構(gòu),所以框架只有適合才是最好。

4、MyBatis 中使用#和$書寫占位符有什么區(qū)別?

答:#將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對傳入的數(shù)據(jù)自動(dòng)加上引號(hào);$將傳入的數(shù)據(jù)直接顯示生成在SQL 中。

注意:使用$占位符可能會(huì)導(dǎo)致 SQL 注射攻ji,能用#的地方就不要使用$,寫 order by 子句的時(shí)候應(yīng)該用$而不是#。

5、解釋一下 MyBatis 中命名空間(namespace)的作用。

答:在大型項(xiàng)目中,可能存在大量的 SQL 語句,這時(shí)候?yàn)槊總€(gè) SQL 語句起一個(gè)唯一的標(biāo)識(shí)(ID)就變得并不容易了。為了解決這個(gè)問題,在 MyBatis 中,可以為每個(gè)映射文件起一個(gè)唯一的命名空間,這樣定義在這個(gè)映射文件中的每個(gè) SQL 語句就成了定義在這個(gè)命名空間中的一個(gè) ID。只要我們能夠保證每個(gè)命名空間中這個(gè) ID 是唯一的,即使在不同映射文件中的語句 ID 相同,也不會(huì)再產(chǎn)生沖突了。

6、什么是 IoC 和 DI?DI 是如何實(shí)現(xiàn)的?

答:IoC 叫控制反轉(zhuǎn),是 Inversion of Control 的縮寫,DI(Dependency Injection)叫依賴注入,是對 IoC 更簡單的詮釋??刂品崔D(zhuǎn)是把傳統(tǒng)上由程序代碼直接操控的對象的調(diào)用權(quán)交給容器,通過容器來實(shí)現(xiàn)對象組件的裝配和管理。所謂的"控制反轉(zhuǎn)"就是對組件對象控制權(quán)的轉(zhuǎn)移,從程序代碼本身轉(zhuǎn)移到了外部容器,由容器來創(chuàng)建對象并管理對象之間的依賴關(guān)系。IoC 體現(xiàn)了好萊塢原則 -"Don’tcallme,we willcallyou"。依賴注入的基本原則是應(yīng)用組件不應(yīng)該負(fù)責(zé)查找資源或者其他依賴的協(xié)作對象。配置對象的工作應(yīng)該由容器負(fù)責(zé),查找資源的邏輯應(yīng)該從應(yīng)用組件的代碼中抽取出來,交給容器來完成。DI 是對 IoC 更準(zhǔn)確的描述,即組件之間的依賴關(guān)系由容器在運(yùn)行期決定,形象的來說,即由容器動(dòng)態(tài)的將某種依賴關(guān)系注入到組件之中。

7、解釋一下什么叫 AOP(面向切面編程)?

答:AOP(Aspect-Oriented Programming)指一種程序設(shè)計(jì)范型,該范型以一種稱為切面(aspect)的語言構(gòu)造為基礎(chǔ),切面是一種新的模塊化機(jī)制,用來描述分散在對象、類或方法中的橫切關(guān)注點(diǎn)(crosscutting concern)。

8、你是如何理解"橫切關(guān)注"這個(gè)概念的?

答:"橫切關(guān)注"是會(huì)影響到整個(gè)應(yīng)用程序的關(guān)注功能,它跟正常的業(yè)務(wù)邏輯是正交的,沒有必然的聯(lián)系,但是幾乎所有的業(yè)務(wù)邏輯都會(huì)涉及到這些關(guān)注功能。通常,事務(wù)、日志、安全性等關(guān)注就是應(yīng)用中的橫切關(guān)注功能。

9、你如何理解 AOP 中的連接點(diǎn)(Joinpoint)、切點(diǎn)(Pointcut)、增強(qiáng)(Advice)、引介(Introduction)、織入(Weaving)、切面(Aspect)這些概念?

答:a. 連接點(diǎn)(Joinpoint):程序執(zhí)行的某個(gè)特定位置(如:某個(gè)方法調(diào)用前、調(diào)用后,方法拋出異常后)。一個(gè)類或一段程序代碼擁有一些具有邊界性質(zhì)的特定點(diǎn),這些代碼中的特定點(diǎn)就是連接點(diǎn)。Spring 僅支持方法的連接點(diǎn)。

b. 切點(diǎn)(Pointcut):如果連接點(diǎn)相當(dāng)于數(shù)據(jù)中的記錄,那么切點(diǎn)相當(dāng)于查詢條件,一個(gè)切點(diǎn)可以匹配多個(gè)連接點(diǎn)。Spring AOP 的規(guī)則解析引擎負(fù)責(zé)解析切點(diǎn)所設(shè)定的查詢條件,找到對應(yīng)的連接點(diǎn)。

c. 增強(qiáng)(Advice):增強(qiáng)是織入到目標(biāo)類連接點(diǎn)上的一段程序代碼。Spring 提供的增強(qiáng)接口都是帶方位名的,如:BeforeAdvice、AfterReturningAdvice、ThrowsAdvice 等。很多資料上將增強(qiáng)譯為“通知”,這明顯是個(gè)詞不達(dá)意的翻譯,讓很多程序員困惑了許久。

說明: Advice 在國內(nèi)的很多書面資料中都被翻譯成"通知",但是很顯然這個(gè)翻譯無法表達(dá)其本質(zhì),有少量的讀物上將這個(gè)詞翻譯為"增強(qiáng)",這個(gè)翻譯是對 Advice 較為準(zhǔn)確的詮釋,我們通過 AOP 將橫切關(guān)注功能加到原有的業(yè)務(wù)邏輯上,這就是對原有業(yè)務(wù)邏輯的一種增強(qiáng),這種增強(qiáng)可以是前置增強(qiáng)、后置增 強(qiáng)、返回后增強(qiáng)、拋異常時(shí)增強(qiáng)和包圍型增強(qiáng)。

d. 引介(Introduction):引介是一種特殊的增強(qiáng),它為類添加一些屬性和方法。這樣,即使一個(gè)業(yè)務(wù)類原本沒有實(shí)現(xiàn)某個(gè)接口,通過引介功能,可以動(dòng)態(tài)的未該業(yè)務(wù)類添加接口的實(shí)現(xiàn)邏輯,讓業(yè)務(wù)類成為 這個(gè)接口的實(shí)現(xiàn)類。

e. 織入(Weaving):織入是將增強(qiáng)添加到目標(biāo)類具體連接點(diǎn)上的過程,AOP 有三種織入方式:

①編譯期織入:需要特殊的 Java 編譯期(例如 AspectJ 的 ajc);

②裝載期織入:要求使用特殊的類加載器, 在裝載類的時(shí)候?qū)︻愡M(jìn)行增強(qiáng);

③運(yùn)行時(shí)織入:在運(yùn)行時(shí)為目標(biāo)類生成代理實(shí)現(xiàn)增強(qiáng)。Spring 采用了動(dòng) 態(tài)代理的方式實(shí)現(xiàn)了運(yùn)行時(shí)織入,而 AspectJ 采用了編譯期織入和裝載期織入的方式。

f. 切面(Aspect):切面是由切點(diǎn)和增強(qiáng)(引介)組成的,它包括了對橫切關(guān)注功能的定義,也包括了對連接點(diǎn)的定義。

10、Spring 支持的事務(wù)管理類型有哪些?你在項(xiàng)目中使用哪種方式?

答:Spring 支持編程式事務(wù)管理和聲明式事務(wù)管理。許多 Spring 框架的用戶選擇聲明式事務(wù)管理,因?yàn)檫@種方式和應(yīng)用程序的關(guān)聯(lián)較少,因此更加符合輕量級(jí)容器的概念。聲明式事務(wù)管理要優(yōu)于編程式事務(wù)管理,盡管在靈活性方面它弱于編程式事務(wù)管理,因?yàn)榫幊淌绞聞?wù)允許你通過代碼控制業(yè)務(wù)。

11、Spring MVC的工作原理是怎樣的?

答:SpringMVC工作原理圖如下:

2020年去一線大廠面試先過SSM框架源碼這一關(guān)!


(1)客戶端的所有請求都交給前端控制器 DispatcherServlet 來處理,它會(huì)負(fù)責(zé)調(diào)用系統(tǒng)的其他模塊來真正處理用戶的請求。

(2) DispatcherServlet 收到請求后,將根據(jù)請求的信息(包括 URL、HTTP 協(xié)議方法、請求頭、請求參數(shù)、Cookie 等)以及 HandlerMapping 的配置找到處理該請求的 Handler(任何一個(gè)對象都可以作為請求的 Handler)。

(3)在這個(gè)地方 Spring 會(huì)通過 HandlerAdapter 對該處理器進(jìn)行封裝。

(4)HandlerAdapter 是一個(gè)適配器,它用統(tǒng)一的接口對各種 Handler 中的方法進(jìn)行調(diào)用。

(5)Handler 完成對用戶請求的處理后,會(huì)返回一個(gè) ModelAndView 對象給 DispatcherServlet,ModelAndView 顧名思義,包含了數(shù)據(jù)模型以及相應(yīng)的視圖的信息。

(6) ModelAndView 的視圖是邏輯視圖,DispatcherServlet 還要借助 ViewResolver 完成從邏輯視圖到真實(shí)視圖對象的解析工作。

(7)當(dāng)?shù)玫秸嬲囊晥D對象后,DispatcherServlet 會(huì)利用視圖對象對模型數(shù)據(jù)進(jìn)行渲染。

(8)客戶端得到響應(yīng),可能是一個(gè)普通的 HTML 頁面,也可以是 XML 或 JSON 字符串,還可以是一張圖片或者一個(gè) PDF 文件。

12、什么是 XSS 攻ji?

答: XSS(Cross Site Script,跨站腳本攻ji)是向網(wǎng)頁中注入惡意腳本在用戶瀏覽網(wǎng)頁時(shí)在用戶瀏覽器中執(zhí)行惡意腳本的攻ji方式??缯灸_本攻ji分有兩種形式:反射型攻ji(誘使用戶點(diǎn)擊一個(gè)嵌入惡意 腳本的鏈接以達(dá)到攻ji的目標(biāo),目前有很多攻ji者利用論壇、微博發(fā)布含有惡意腳本的 URL 就屬于這種方式)和持久型攻ji(將惡意腳本提交到被攻ji網(wǎng)站的數(shù)據(jù)庫中,用戶瀏覽網(wǎng)頁時(shí),惡意腳本從數(shù)據(jù) 庫中被加載到頁面執(zhí)行,QQ 郵箱的早期版本就曾經(jīng)被利用作為持久型跨站腳本攻ji的平臺(tái))。XSS 雖然不是什么新鮮玩意,但是攻ji的手法卻不斷翻新,防范 XSS 主要有兩方面:消毒(對危險(xiǎn)字符進(jìn)行轉(zhuǎn)義)和HttpOnly (防范 XSS 攻ji者竊取 Cookie 數(shù)據(jù))。

13、SQL 注入攻ji?

答: SQL 注入攻ji是注入攻ji最常見的形式(此外還有 OS 注入攻ji(Struts 2 的高危漏洞就是通過OGNL 實(shí)施 OS 注入攻ji導(dǎo)致的)),當(dāng)服務(wù)器使用請求參數(shù)構(gòu)造 SQL 語句時(shí),惡意的 SQL 被嵌入到SQL 中交給數(shù)據(jù)庫執(zhí)行。SQL 注入攻ji需要攻ji者對數(shù)據(jù)庫結(jié)構(gòu)有所了解才能進(jìn)行,攻ji者想要獲得表結(jié)構(gòu)有多種方式:

(1)如果使用開源系統(tǒng)搭建網(wǎng)站,數(shù)據(jù)庫結(jié)構(gòu)也是公開的(目前有很多現(xiàn)成的系統(tǒng)可以直接搭建論壇,電商網(wǎng)站,雖然方便快 捷但是風(fēng)險(xiǎn)是必須要認(rèn)真評(píng)估的);

(2)錯(cuò)誤回顯(如果將服務(wù)器的錯(cuò)誤信息直接顯示在頁面上,攻ji者可以通過非法參數(shù)引發(fā)頁面錯(cuò)誤從而通過錯(cuò)誤信息了解數(shù)據(jù)庫結(jié)構(gòu),Web應(yīng)用應(yīng)當(dāng)設(shè)置友好的錯(cuò)誤頁,一方面符合最小驚訝原則,一方面屏蔽掉可能給系統(tǒng)帶來危險(xiǎn)的錯(cuò)誤回顯信息);

(3)盲注。防范 SQL 注入攻ji也可以采用消毒的方式,通過正則表達(dá)式對請求參數(shù)進(jìn)行驗(yàn)證,此外,參數(shù)綁定也是很好的手段,這樣惡意的 SQL 會(huì)被當(dāng)做 SQL 的參數(shù)而不是命令被執(zhí)行,JDBC 中的 PreparedStatement 就是支持參數(shù)綁定的語句對象,從性能和安全性上都明顯優(yōu)于 Statement。

14、什么是CSRF攻ji?

答: CSRF 攻ji(Cross Site Request Forgery,跨站請求偽造)是攻ji者通過跨站請求,以合法的用戶身份進(jìn)行非法操作(如轉(zhuǎn)賬或發(fā)帖等)。CSRF 的原理是利用瀏覽器的 Cookie 或服務(wù)器的Session,盜取用戶身份,其原理如下圖所示。防范 CSRF 的主要手段是識(shí)別請求者的身份,主要有以下幾種方式:

(1) 在表單中添加令牌(token);

(2) 驗(yàn)證碼;

(3) 檢查請求頭中的 Referer。

令牌和驗(yàn)證都具有一次消費(fèi)性的特征,因此在原理上一致的,但是驗(yàn)證碼是一種糟糕的用戶體驗(yàn),不是必要的情況下不要輕易使用驗(yàn)證碼,目前很多網(wǎng)站的做法是如果在短時(shí)間內(nèi)多次提交一個(gè)表單未獲得成功后才要求提供驗(yàn)證碼,這樣會(huì)獲得較好的用戶體驗(yàn)。

2020年去一線大廠面試先過SSM框架源碼這一關(guān)!

15簡述Mybatis一級(jí)、二級(jí)緩存

1)一級(jí)緩存: 基于 PerpetualCache 的 HashMap 本地緩存,其存儲(chǔ)作用域?yàn)?Session,當(dāng) Session flush 或 close 之后,該 Session 中的所有 Cache 就將清空。

2)二級(jí)緩存與一級(jí)緩存其機(jī)制相同,默認(rèn)也是采用 PerpetualCache,HashMap 存儲(chǔ),不同在于其存儲(chǔ)作用域?yàn)?Mapper(Namespace),并且可自定義存儲(chǔ)源,如 Ehcache。要開啟二級(jí)緩存,你需要在你的 SQL 映射文件中添加一行:

3)對于緩存數(shù)據(jù)更新機(jī)制,當(dāng)某一個(gè)作用域(一級(jí)緩存 Session/二級(jí)緩存Namespaces)的進(jìn)行了C/U/D 操作后,默認(rèn)該作用域下所有 select 中的緩存將被 clear。

16、JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?

(1)數(shù)據(jù)庫鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費(fèi)從而影響系統(tǒng)性能,如果使用數(shù)據(jù)庫鏈接池可解決此問題。

解決:在SqlMapConfig.xml中配置數(shù)據(jù)鏈接池,使用連接池管理數(shù)據(jù)庫鏈接。

(2) Sql語句寫在代碼中造成代碼不易維護(hù),實(shí)際應(yīng)用sql變化的可能較大,sql變動(dòng)需要改變java代碼。

解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。

(3) 向sql語句傳參數(shù)麻煩,因?yàn)閟ql語句的where條件不一定,可能多也可能少,占位符需要和參數(shù)一一對應(yīng)。

解決: Mybatis自動(dòng)將java對象映射至sql語句。

(4)對結(jié)果集解析麻煩,sql變化導(dǎo)致解析代碼變化,且解析前需要遍歷,如果能將數(shù)據(jù)庫記錄封裝成pojo對象解析比較方便。

解決:Mybatis自動(dòng)將sql執(zhí)行結(jié)果映射至java對象。

另外的參考回答

頻繁的創(chuàng)建數(shù)據(jù)連接,關(guān)閉資源,造成性能的下降,使用數(shù)據(jù)文庫連接池 解決這個(gè)問題用數(shù)據(jù)庫連接池.在SqlMapConfig.xml 配置數(shù)據(jù)庫連接池 c3p0 DBCP

Jdbc 編程sql 的可維護(hù)性不高. Mybatis采用配置文件的方式解決sql可維護(hù)的問題

在mapper.xml中配置 ,是sql與代碼分離 可維護(hù)行變高

Jdbc 傳入?yún)?shù)比較麻煩. 參數(shù)有時(shí)候多,參數(shù)要和占位符一一對應(yīng).

Mybatis 使用statement 的 paremterType 定義輸入的參數(shù)類型

對結(jié)果解析比較麻煩. Mybatis 使用resultType 自動(dòng)映射到pojo中解決了jdbc解析結(jié)果的麻煩

歡迎大家關(guān)注我的公種浩【程序員追風(fēng)】,2019年多家公司java面試題整理了120多頁pdf文檔,文章都會(huì)在里面更新,整理的資料也會(huì)放在里面。

2020年去一線大廠面試先過SSM框架源碼這一關(guān)!

最后

歡迎大家一起交流,喜歡文章記得關(guān)注我點(diǎn)個(gè)贊喲,感謝支持!


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI