五大框架之MyBatis面試經常被問到的問題

2020-12-17 黃豆瀟瀟分享百科

前面講了springmvc和hibernate的一些原理和使用,有些朋友私信我問能不能講一下面試中經常遇到的問題,那麼今天就不講mybatis在項目中怎麼使用的,著重談一下我經常遇到的一些問題吧,無論是筆試題還是面試官問到的一些問題,能想起來的都列舉了下來。

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

① 資料庫連結創建、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用資料庫連結池可解決此問題。

解決:在SqlMapConfig.xml中配置數據連結池,使用連接池管理資料庫連結。

② Sql語句寫在代碼中造成代碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java代碼。

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

③ 向sql語句傳參數麻煩,因為sql語句的where條件不一定,可能多也可能少,佔位符需要和參數一一對應。

解決: Mybatis自動將java對象映射至sql語句。

④ 對結果集解析麻煩,sql變化導致解析代碼變化,且解析前需要遍歷,如果能將資料庫記錄封裝成pojo對象解析比較方便。

解決:Mybatis自動將sql執行結果映射至java對象。

2.MyBatis編程步驟是什麼樣的?

① 創建SqlSessionFactory

② 通過SqlSessionFactory創建SqlSession

③ 通過sqlsession執行資料庫操作

④ 調用session.commit()提交事務

⑤ 調用session.close()關閉會話

3.MyBatis與Hibernate有哪些不同?

Mybatis和hibernate不同,它不完全是一個ORM框架,因為MyBatis需要程式設計師自己編寫Sql語句,不過mybatis可以通過XML或註解方式靈活配置要運行的sql語句,並將java對象和sql語句映射生成最終執行的sql,最後將sql執行的結果再映射生成java對象。

Mybatis學習門檻低,簡單易學,程式設計師直接編寫原生態sql,可嚴格控制sql執行性能,靈活度高,非常適合對關係數據模型要求不高的軟體開發,例如網際網路軟體、企業運營類軟體等,因為這類軟體需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是mybatis無法做到資料庫無關性,如果需要實現支持多種資料庫的軟體則需要自定義多套sql映射文件,工作量大。

Hibernate對象/關係映射能力強,資料庫無關性好,對於關係模型要求高的軟體(例如需求固定的定製化軟體)如果用hibernate開發可以節省很多代碼,提高效率。但是Hibernate的缺點是學習門檻高,要精通門檻更高,而且怎麼設計O/R映射,在性能和對象模型之間如何權衡,以及怎樣用好Hibernate需要具有很強的經驗和能力才行。

總之,按照用戶的需求在有限的資源環境下只要能做出維護性、擴展性良好的軟體架構都是好架構,所以框架只有適合才是最好。

4.使用MyBatis的mapper接口調用時有哪些要求?

① Mapper接口方法名和mapper.xml中定義的每個sql的id相同

② Mapper接口方法的輸入參數類型和mapper.xml中定義的每個sql 的parameterType的類型相同

③ Mapper接口方法的輸出參數類型和mapper.xml中定義的每個sql的resultType的類型相同

④ Mapper.xml文件中的namespace即是mapper接口的類路徑。

5.SqlMapConfig.xml中配置有哪些內容?

SqlMapConfig.xml中配置的內容和順序如下:

properties(屬性)

settings(配置)

typeAliases(類型別名)

typeHandlers(類型處理器)

objectFactory(對象工廠)

plugins(插件)

environments(環境集合屬性對象)

environment(環境子屬性對象)

transactionManager(事務管理)

dataSource(數據源)

mappers(映射器)

6.簡單的說一下MyBatis的一級緩存和二級緩存?

Mybatis首先去緩存中查詢結果集,如果沒有則查詢資料庫,如果有則從緩存取出返回結果集就不走資料庫。Mybatis內部存儲緩存使用一個HashMap,key為hashCode+sqlId+Sql語句。value為從查詢出來映射生成的java對象

Mybatis的二級緩存即查詢緩存,它的作用域是一個mapper的namespace,即在同一個namespace中查詢sql可以從緩存中獲取數據。二級緩存是可以跨SqlSession的。

7.Mapper編寫有哪幾種方式?

7-1、接口實現類繼承SqlSessionDaoSupport

使用此種方法需要編寫mapper接口,mapper接口實現類、mapper.xml文件

1、在sqlMapConfig.xml中配置mapper.xml的位置

00001. <mappers>

00002. <mapper resource="mapper.xml文件的地址" />

00003. <mapper resource="mapper.xml文件的地址" />

00004. </mappers>

2、定義mapper接口

3、實現類集成SqlSessionDaoSupport

mapper方法中可以this.getSqlSession()進行數據增刪改查。

4、spring 配置

00001. <bean id=" ">

00002. <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>

00003. </bean>

7-2、使用org.mybatis.spring.mapper.MapperFactoryBean

1、在sqlMapConfig.xml中配置mapper.xml的位置

如果mapper.xml和mappre接口的名稱相同且在同一個目錄,這裡可以不用配置

00001. <mappers>

00002. <mapper resource="mapper.xml文件的地址" />

00003. <mapper resource="mapper.xml文件的地址" />

00004. </mappers>

2、定義mapper接口

注意

mapper.xml中的namespace為mapper接口的地址mapper接口中的方法名和mapper.xml中的定義的statement的id保持一致Spring中定義00001. <bean id="">

00002. <property name="mapperInterface" value="mapper接口地址" />

00003. <property name="sqlSessionFactory" ref="sqlSessionFactory" />

00004. </bean>

7-3、使用mapper掃描器

1、mapper.xml文件編寫,

注意:

mapper.xml中的namespace為mapper接口的地址

mapper接口中的方法名和mapper.xml中的定義的statement的id保持一致

如果將mapper.xml和mapper接口的名稱保持一致則不用在sqlMapConfig.xml中進行配置

2、定義mapper接口

注意mapper.xml的文件名和mapper的接口名稱保持一致,且放在同一個目錄

3、配置mapper掃描器

00001. <bean>

00002. <property name="basePackage" value="mapper接口包地址"></property>

00003. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

00004. </bean>

4、使用掃描器後從spring容器中獲取mapper的實現對象

掃描器將接口通過代理方法生成實現對象,要spring容器中自動註冊,名稱為mapper 接口的名稱。

相關焦點

  • MyBati面試必問到的問題,你知道幾個?
    在Java開發相關崗位面試過程中,尤其框架最為面試的重點,面試官就喜歡那這些框架來難為求職者了,接下來我們一起學習MyBatis的常問面試題。mybatis動態sql是做什麼的?mybatis為我們提供動態的sql標籤,其中mybatis的標籤分別定義sql語句(select、insert、delete、upadate)、控制動態sql拼接(if、foreach、choose)、格式化輸出(where、set、trim)、配置關聯關係(collection、association)、配置Java對象屬性與查詢結果集中列表對應關係(resultMap)以及定義常用和引用(sql
  • Java程式設計師必須知道的MyBatis經典面試題
    對於現在主流的持久層框架,經常會在面試題目中出現,那麼你對MyBatis經典面試題了解多少呢?1. #{}和${}的區別是什麼?MyBatis和Hibernate都是持久層框架,但是它們不一樣,Hibernate是一個ORM框架,MyBatis只是一個半自動化的ORM框架,MyBatis是需要手動編寫SQL語句,可以通過XML文件配置或者註解靈活配置,但是Hibernate是不需要編寫SQL語句,是可以通過註解配置可以查詢數據。
  • Java 持久層框架之 MyBatis
    具體的 SQL 需要程式設計師自己編寫,然後通過 SQL 語句映射文件,將 SQL 所需的參數,以及返回的結果欄位映射到指定 POJO。MyBatis 特點在 XML 文件中配置 SQL 語句,實現了 SQL 語句與代碼的分離,給程序的維護帶來了很大便利。
  • Java程式設計師必會 springmvc-spring-mybatis框架整合搭建傻瓜教程
    ssm是用於將springmvc-spring-mybatis三個框架整合來進行java開發web項目。本文通過ssm三大框架整合的形式講解springmvc的使用教程,最新的框架版本主流IDE,只要按照圖中步驟能夠保證每個人的框架搭建完成並成功運行。這裡使用maven來構建項目,我們需要創建一個名為ssm的maven項目,打包方式為war包。
  • 看到Mybatis源碼就感到煩躁,怎麼辦?
    因為面試的時候,面試官很喜歡問:你看過什麼框架源碼?JDK源碼也行。這時候,如果回答沒有看過,雖然沒讓你立馬回去等通知。但也許,你在面試官心中的印象就大打折扣了。如果回答看過,並且還能較為流利地說上一番,那面試官或許會在心裡讚嘆:小夥子可以呀!
  • 使用mybatis框架,完成增刪改查操作
    mybatis框架的繼續學習,安排如下:對昨天學習的內容做個小結,其中補充一個昨天忽視的問題。資料庫無外乎就是增刪改查,所以使用mybatis做一個完整的crud操作。一、mybatis使用步驟回顧主要是涉及到配置文件的編寫,其中又包含核心配置文件和映射文件。創建mybatis-config.xml核心配置文件。
  • 15家面試、幾個offer,面試歷程分享
    1、新東方 03_19技術面試,兩輪,地點:中關村地鐵站E口,某大廈大廈6層,面試時間:2019_03_19_10:30(提前到了45分鐘)1、自我介紹2、項目介紹3、LiveChat項目,第一個4、海南海航項目,第二個,最熟悉5、技術:資料庫 mysql—1.給查詢頻繁的詩句建立索引—使用好的sql
  • 通過Java經典面試題之MyBatis與Hibernate的區別深入了解MyBatis
    那麼這道面試題有多經典呢,經典到不具備任何專業能力HR可能都會問你這個問題,雖然她壓根兒不知道答案!她會參照他們學的什麼狗屁理論判斷你回答問題的時候的緊張程度來判斷你對這個問題的掌握程度。看上去有點扯,有時候總有幾個倒黴蛋會碰上這種事情的。先來看一下MyBatis的LOGO.
  • 上兩個月,15家面試,幾個offer , 我的面試歷程!
    ,突然有問題,你是如何發現的?答:memcache,redis,還有session,cookie面試官2:問:介紹一下你用的最熟的技術數據結構和算法基本入門,java的話,了解設計模式和jvm還有框架使用問:框架你有用那些Spring+SpringMVC+Mybatis
  • MyBatis dynamic SQL 1.1.4 發布,生成動態 SQL 的框架
    MyBatis dynamic SQL 1.1.4 已發布,MyBatis Dynamic SQL 是生成動態 SQL 語句的框架,可把它看作是一個類型安全的 SQL 模板庫,它還支持 MyBatis3
  • mybatis框架之 resultMap 的高級應用
    各位小夥伴今天我們來了解resultMap 的高級應用mybatis 查詢多表資料庫表結構中存在的幾種多表關係:一對一 ,一對多, 多對一 ,多對多第二種方式:用 mybatis 的 resultMap 標籤返回創建一個Dept.Java
  • mybatis框架之多表高級查詢
    mybatis中的高級查詢,即多表關聯查詢。主要分為:一對一查詢,一對多查詢,多對多查詢,本來打算全學完的,奈何計劃趕不上變化。一、知識點補充1resultMap又要提到前面那個說了好幾遍的起別名問題了,使用resultMap標籤也能解決這個問題。
  • 會計面試中經常被問到的幾個問題
    從大學畢業到現在,一直從事的是財務工作,期間經歷過不少的面試,有大公司也有小公司,今年也面試不少人,今天整理一下財務面試中常被問到的幾個問題分享給大家,希望有用。第一,不管大小公司,第一個被要求的通常是自我介紹。
  • 程式設計師真實面試經歷:15家公司,幾個offer
    1、新東方 03_19技術面試,兩輪,地點:中關村地鐵站E口,某大廈6層,面試時間:2019_03_19_10:30(提前到了45分鐘)1、自我介紹2、項目介紹3、LiveChat項目,第一個4、海南海航項目,第二個,最熟悉5、技術:資料庫 mysql—1.給查詢頻繁的詩句建立索引—使用好的sql
  • 從0 開始手寫一個 Mybatis 框架,三步搞定!
    MyBatis框架的核心功能其實不難,無非就是動態代理和jdbc的操作,難的是寫出來可擴展,高內聚,低耦合的規範的代碼。本文完成的Mybatis功能比較簡單,代碼還有許多需要改進的地方,大家可以結合Mybatis源碼去動手完善。
  • Java SSM框架相關基礎面試題整理
    一、Spring面試題1、Spring 在ssm中起什麼作用?
  • 空姐面試時經常被問到的幾個問題
    在空姐面試中,有很多朋友問面試官都會問什麼問題啊,我先提前準備準備。這些相關的面試恐懼症太多了,現在讓我們整理一些典型的問題,讓您提前準備!問題一:請你先自我介紹一下?不管我們參加什麼面試,我們都有準備自我介紹的習慣,然後在問這個問題時記住它,但是所有應試者都以相同的方式回應。您可以使用微表情,介紹方向為團隊合作精神,服務精神,個人品格,添加亮點,以表達形式口語化,不要讓人聽起來像是背書,找到要點,規矩清潔,結構清晰。問題二:您為什麼選擇我們的航空公司?
  • Mybatis_day01
    第二步優化:SQL統一存取問題描述:我們使用JDBC進行操作資料庫時,SQL語句基本都散落在各個JAVA類中,這樣有三個不足之處:第一,可讀性很差,不利於維護以及做性能調優。第二,改動Java代碼需要重新編譯、打包部署。
  • 文職輔警面試經常問的問題-軍隊人才網招聘官網
    廣東軍隊人才網提供以下軍隊文職考試快訊信息:文職輔警面試經常問的問題-軍隊人才網招聘官網,更多關於部隊文職面試名單,軍轉幹考試快訊的內容,請關注廣東軍轉幹考試網/廣東人事考試網!
  • 記mybatis應用在springboot中的一次踩坑記錄
    有次從網上找了個springboot+mybatis+redis的web應用框架。簡單了解了下項目架構,就匆匆上手,照葫蘆畫瓢的做了個簡單的CRUD。看到項目中源作者在UserMapper.xml文件中,沒有定義user類型直接可以在resultType和parameterType中只用。