【秋招必備】Mybatis面試題(2021最新版)


前言

MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。

小編分享的這份Java后端開發面試總結包含了JavaOOP、Java集合容器、Java異常、並發編程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL數據庫、消息中間件MQ、Dubbo、Linux、ZooKeeper、 分布式&數據結構與算法等26個專題技術點,都是小編在各個大廠總結出來的面試真題,已經有很多粉絲靠這份PDF拿下眾多大廠的offer,今天在這里總結分享給到大家!【已完結】

完整版Java面試題地址:2021最新面試題合集集錦

序號 專題 內容 鏈接
1 中間件 【秋招必備】Java中間件面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14851355.html
2 微服務 【秋招必備】Java微服務面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14893883.html
3 並發編程 【秋招必備】Java並發編程面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14893914.html
4 Java基礎 【秋招必備】Java基礎知識面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14968925.html
5 Spring Boot 【秋招必備】Spring Boot面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14968927.html
6 Redis 【秋招必備】Redis面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14968935.html
7 Spring MVC 【秋招必備】Spring MVC面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14977235.html
8 Spring Cloud 【秋招必備】Spring Cloud面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14977264.html
9 MySQL優化 【秋招必備】MySQL優化面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14977264.html
10 JVM 【秋招必備】JVM性能調優面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14981629.html
11 Linux 【秋招必備】Linux面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15004102.html
12 Mybatis 【秋招必備】Mybatis面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15004110.html
13 網絡編程 【秋招必備】TCP,UDP,Socket,Http網絡編程面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15012942.html
14 設計模式 【秋招必備】設計模式面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15012953.html
15 大數據 【秋招必備】大數據面試題100道(2021最新版) https://www.cnblogs.com/QLCZ/p/15012984.html
16 Tomcat 【秋招必備】Tomcat面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15017627.html
17 多線程 【秋招必備】多線程面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15017638.html
18 Nginx 【秋招必備】Nginx_BIO_NIO_AIO面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15032145.html
19 memcache 【秋招必備】memcache面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15032231.html
20 java異常 【秋招必備】java異常面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15035951.html
21 Java虛擬機 【秋招必備】Java虛擬機面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15036517.html
22 Java集合 【秋招必備】Java集合面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15041523.html
23 Git常用命令 【秋招必備】Git常用命令(2021最新版) https://www.cnblogs.com/QLCZ/p/15041786.html
24 Elasticsearch 【秋招必備】Elasticsearch面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15044301.html
25 Dubbo 【秋招必備】Dubbo面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15044434.html

1、模糊查詢like語句該怎么寫

2、Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重復?

  • 不同的Xml映射文件,如果配置了namespace,那么id可以重復;如果沒有配置namespace,那么id不能重復;畢竟namespace不是必須的,只是最佳實踐而已。
  • 原因就是namespace+id是作為Map<String, MappedStatement>的key使用的,如果沒有namespace,就剩下id,那么,id重復會導致數據互相覆蓋。有了namespace,自然id就可以重復,namespace不同,namespace+id自然也就不同。

3、Mybatis優缺點

優點

  • 與傳統的數據庫訪問技術相比,ORM有以下優點:
  • 基於SQL語句編程,相當靈活,不會對應用程序或者數據庫的現有設計造成任何影響,SQL寫在XML里,解除sql與程序代碼的耦合,便於統一管理;提供XML標簽,支持編寫動態SQL語句,並可重用
  • 與JDBC相比,減少了50%以上的代碼量,消除了JDBC大量冗余的代碼,不需要手動開關連接很好的與各種數據庫兼容(因為MyBatis使用JDBC來連接數據庫,所以只要JDBC支持的數據庫MyBatis都支持)
  • 提供映射標簽,支持對象與數據庫的ORM字段關系映射;提供對象關系映射標簽,支持對象關系組件維護
  • 能夠與Spring很好的集成

缺點

  • SQL語句的編寫工作量較大,尤其當字段多、關聯表多時,對開發人員編寫SQL語句的功底有一定要求
  • SQL語句依賴於數據庫,導致數據庫移植性差,不能隨意更換數據庫

4、Mybatis是如何進行分頁的?分頁插件的原理是什么?

  • Mybatis使用RowBounds對象進行分頁,它是針對ResultSet結果集執行的內存分頁,而非物理分頁,可以在sql內直接書寫帶有物理分頁的參數來完成物理分頁功能,也可以使用分頁插件來完成物理分頁。
  • 分頁插件的基本原理是使用Mybatis提供的插件接口,實現自定義插件,在插件的攔截方法內攔截待執行的sql,然后重寫sql,根據dialect方言,添加對應的物理分頁語句和物理分頁參數。
  • 舉例:select * from student,攔截sql后重寫為:select t.* from (select * from student) t limit 0, 10

5、請說說MyBatis的工作原理

在學習 MyBatis 程序之前,需要了解一下 MyBatis 工作原理,以便於理解程序。MyBatis 的工作原理如下圖:

6、Mybatis是否支持延遲加載?如果支持,它的實現原理是什么?

  • Mybatis僅支持association關聯對象和collection關聯集合對象的延遲加載,association指的就是一對一,collection指的就是一對多查詢。在Mybatis配置文件中,可以配置是否啟用延遲加載lazyLoadingEnabled=true|false。
  • 它的原理是,使用CGLIB創建目標對象的代理對象,當調用目標方法時,進入攔截器方法,比如調用a.getB().getName(),攔截器invoke()方法發現a.getB()是null值,那么就會單獨發送事先保存好的查詢關聯B對象的sql,把B查詢上來,然后調用a.setB(b),於是a的對象b屬性就有值了,接着完成a.getB().getName()方法的調用。這就是延遲加載的基本原理。
  • 當然了,不光是Mybatis,幾乎所有的包括Hibernate,支持延遲加載的原理都是一樣的。

7、Mybatis是如何將sql執行結果封裝為目標對象並返回的?都有哪些映射形式?

  • 第一種是使用 標簽,逐一定義列名和對象屬性名之間的映射關系。
  • 第二種是使用sql列的別名功能,將列別名書寫為對象屬性名,比如T_NAME AS NAME,對象屬性名一般是name,小寫,但是列名不區分大小寫,Mybatis會忽略列名大小寫,智能找到與之對應對象屬性名,你甚至可以寫成T_NAME AS NaMe,Mybatis一樣可以正常工作。

8、{}和${}的區別

  • {}是占位符,預編譯處理;${}是拼接符,字符串替換,沒有預編譯處理。Mybatis在處理#{}時,#{}傳入參數是以字符串傳入,會將SQL中的#{}替換為?號,調用
  • PreparedStatement的set方法來賦值。
  • {} 可以有效的防止SQL注入,提高系統安全性;${} 不能防止SQL 注入
  • {} 的變量替換是在DBMS 中;${} 的變量替換是在 DBMS 外

9、在mapper中如何傳遞多個參數

方法3:Map傳參法

10、簡述Mybatis的Xml映射文件和Mybatis內部數據結構之間的映射關系?

答:Mybatis將所有Xml配置信息都封裝到All-In-One重量級對象Confifiguration內部。在Xml映射文件中, 標簽會被解析為ParameterMap對象,其每個子元素會被解析為ParameterMapping對象。 標簽會被解析為ResultMap對象,其每個子元素會被解析為ResultMapping對象。每一個


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM