天天看點

花了20天的時間給粉絲整理的一套“最全“的Java求職筆記(五)1為什麼寫這套Java求職筆記2一套Mybaties知識大綱技術圖3Mybaties持久層架構面試考點4結束語5個人說明

前言:前幾天有粉絲問我,網上java面試題總是參差不齊,希望我為他整理一套全面的java面試題,并且這套java面試題有個要求,必須能夠讓他20天就能看完這些面試題,他說現在很多面試題我看都得看3個月才能看完,然後我才能去找工作,但是自己得時間有限是以想讓我幫他總結一套萬能面試java求職筆記。接下來我将會至少分為12個章節進行闡述這套Java求職筆記,感興趣的可以堅持看完!覺得不錯的可以點個贊。

1為什麼寫這套Java求職筆記

很早的時候我就想寫一些Java求職方向的一些文章,由于很長時間耽擱了加上,有粉絲背景問我,可不可以幫他總結一些java求職筆記,他看了很多Java技術有很多技術,很迷茫不知道學哪些,我笑着說,不要着急,無論你到什麼時候你都會迷茫,因為技術一直在更新,謝謝你信任我,解救你的迷茫唯一辦法就是多看LRyab部落格,就是這樣我帶着粉絲的問題,開始編寫了這套Java求職筆記,看完這套求職筆記,我相信很多人都會找到屬于自己的心儀工作。

2一套Mybaties知識大綱技術圖

思來想去,本來不想放這套思維大綱技術圖,但是很多大佬都喜歡放思維導圖,那麼我也放一張思維大腦圖,友善大家以後學習,在java求職的時候可以帶上這張腦圖。

花了20天的時間給粉絲整理的一套“最全“的Java求職筆記(五)1為什麼寫這套Java求職筆記2一套Mybaties知識大綱技術圖3Mybaties持久層架構面試考點4結束語5個人說明

3Mybaties持久層架構面試考點

3.1Mybaties基礎知識

  • ✅說一下Mybaties吧?

Mybatis是一款優秀的持久層架構,它對JDBC的操作資料庫的過程進行了封裝,使得開發者隻需要關注SQL本身,不需要花費精力去處理一些重複和繁瑣的步驟。通過java對象和statement中的SQL進行映射生成最終執行的SQL語句,最後由mysql架構執行SQL并将結果映射成java對象并傳回。

  • ✅ORM和半ORM:

ORM:關系對象映射,簡單點就是将資料庫中的表和java中的對象建立映射關系,可以讓我們操作對象來間接的操作資料庫。

半ORM:在查詢關系對象或者關聯集合對象時,需要手工編寫sql來完成。

  • ✅傳統JDBC存在的問題

代碼繁瑣,重複度高,備援度高

資料庫連結對象多次建立

代碼維護度高,需要修改的代碼難度大

  • ✅Mybaties的工作原理?

1、加載mybatis全局配置檔案(資料源、mapper映射檔案等),解析配置檔案,MyBatis基于XML配置檔案生成Configuration,和一個個MappedStatement(包括了參數映射配置、動态SQL語句、結果映射配置),其對應着<select | update | delete | insert>标簽項。

2、構造會話工廠:SqlSessionFactoryBuilder通過Configuration對象生成SqlSessionFactory,用來開啟SqlSession。

3、SqlSession對象完成和資料庫的互動。

3.1使用者程式調用mybatis接口層api(即Mapper接口中的方法)

3.2SqlSession通過調用api的Statement ID找到對應的MappedStatement對象

3.3通過Executor(負責動态SQL的生成和查詢緩存的維護)将MappedStatement對象進行解析,sql參數轉化、動态sql拼接,生成jdbc Statement對象

4、JDBC執行sql

5、借助MappedStatement中的結果映射關系,将傳回結果轉化成HashMap、JavaBean等存儲結構并傳回。

  • ✅ Mybaties架構的優缺點

優點:

基于SQL語句程式設計,相當靈活,不會對應用程式或者資料庫的現有設計造成任何影響,SQL寫在XML裡,解除sql與程式代碼的耦合,便于統一管理;提供XML标簽,支援編寫動态SQL語句,并可重用。

與JDBC相比,減少了50%以上的代碼量,消除了JDBC大量備援的代碼,不需要手動開關連接配接;

很好的與各種資料庫相容,能夠與 Spring 很好的內建;

提供映射标簽,支援對象與資料庫的ORM字段關系映射;提供對象關系映射标簽,支援對象關系元件維護。

缺點:

SQL語句的編寫工作量較大,尤其當字段多、關聯表多時,對開發人員編寫SQL語句的功底有一定要求。

QL語句依賴于資料庫,導緻資料庫移植性差,不能随意更換資料庫。

  • ✅Mybaties的編碼步驟是什麼?

建立工廠類

通過工廠類建立sqlsession

執行資料庫

送出事務

關閉會話

  • ✅Mybaties #{}和${}的差別?

#是預編譯處理,會把SQL中的#{}替換為?調用PreparedStatement的set方法來指派,使用#{}可以有效的防止sql注入,提升系統的安全性。

${}是字元串替換,用于标簽屬性值和sql内部,屬于靜态文本替換。把${}替換為變量的值

  • ✅模糊查詢like語句該怎麼寫?

在java中直接添加sql通配符

在sql語句中進行拼接通配符(會引起sql注入問題)

  • ✅實體類型屬性名稱和表字段名稱不一緻怎麼辦?

查詢sql定義字段名的别名,讓别名和實體類屬性一緻

通過resultMap類映射字段名和實體類型屬性名一一對應

  • ✅說一下Mybaties中xml的常見标簽?

select、insert、updae、delete、resultMap、parameterMap、sql、include

  • ✅Mybaties中的動态sql?簡述一下動态sql的原理

MyBatis動态sql可以在Xml映射檔案内,以标簽的形式編寫動态sql。執行原理是根據表達式的值完成邏輯判斷并動态拼接 sql 的功能。

MyBatis提供了9種動态sql标簽:trim、where、set、foreach、if、choose、when、otherwise、bind。

  • ✅說說Mybaties中的一級緩存和二級緩存

一級緩存是SqlSession級别的緩存。在操作資料庫時需要構造 sqlSession對象,在對象中有一個(記憶體區域)資料結構(HashMap)用于存儲緩存資料。不同的sqlSession之間的緩存資料區域(HashMap)是互相不影響的。

一級緩存的作用域是同一個SqlSession,在同一個sqlSession中兩次執行相同的sql語句,第一次執行完畢會将資料庫中查詢的資料寫到緩存(記憶體),第二次會從緩存中擷取資料将不再從資料庫查詢,進而提高查詢效率。當一個sqlSession結束後該sqlSession中的一級緩存也就不存在了。Mybatis預設開啟一級緩存。

二級緩存是mapper級别的緩存,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession去操作資料庫得到資料會存在二級緩存區域,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的。

二級緩存是多個SqlSession共享的,其作用域是mapper的同一個namespace,不同的sqlSession兩次執行相同namespace下的sql語句且向sql中傳遞參數也相同即最終執行相同的sql語句,第一次執行完畢會将資料庫中查詢的資料寫到緩存(記憶體),第二次會從緩存中擷取資料将不再從資料庫查詢,進而提高查詢效率。Mybatis預設沒有開啟二級緩存需要在setting全局參數中配置開啟二級緩存。

如果緩存中有資料就不用從資料庫中擷取,大大提高系統性能。

  • ✅Mybaties中如何實作分頁的?

mybatis架構分頁實作,有幾種方式,

最簡單的就是利用原生的sql關鍵字limit來實作

還有一種rowsbounds就是利用interceptor來拼接sql,實作和limit一樣的功能

再一個就是利用PageHelper來實作。

  • ✅ Mybaties的分頁插件的運作原理,如何實作分頁的,自己如何寫插件?

分頁插件的基本原理是使用Mybatis提供的插件接口,實作自定義插件,在插件的攔截方法内攔截待執行的sql,然後重寫sql,根據dialect方言,添加對應的實體分頁語句和實體分頁參數。

舉例:select * from student,攔截sql後重寫為:select t.* from (select * from student) t limit 0, 10

Mybatis僅可以編寫針對ParameterHandler、ResultSetHandler、StatementHandler、Executor這4種接口的插件,Mybatis使用JDK的動态代理,為需要攔截的接口生成代理對象以實作接口方法攔截功能,每當執行這4種接口對象的方法時,就會進入攔截方法,具體就是InvocationHandler的invoke()方法,當然,隻會攔截那些你指定需要攔截的方法。

實作Mybatis的Interceptor接口并複寫intercept()方法,然後在給插件編寫注解,指定要攔截哪一個接口的哪些方法即可,記住,别忘了在配置檔案中配置你編寫的插件。

  • ✅Mybaties-Plus簡介

Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上隻做增強不做改變,為簡化開發、提高效率而生。

4結束語

知識疊代更新快,内容經驗容易過時得時代,一定要學會這幾種能力,挖掘能力,拆解能力,總結能力,優化能力。

5個人說明

我是LRyab部落格,專注電商項目實戰開發,擅長網站搭建與技術問題指導,經驗是由一點一點積累的,思維也是由一天一天訓練出來的。謝謝大家的閱讀,原創不易,如果你認為文章對你有所幫助,就點個贊感謝大家支援,你的點贊是我持續寫作的動力!