spring MyBatis的相關面試題

  • 2021 年 5 月 28 日
  • 筆記

(相關面試題! 供參考!)

  1.ORM框架有哪些?

     MyBatis:半自動化框架(不是純ORM) 需要寫動態SQL語句,實體類和SQL語句之間建立映射關係

     Spring:輕量級框架, Java EE的春天,當前主流框架(低耦合 高內聚)

     解釋ORM : (Object Relational Mapping):表示對象 關係 映射:

    • 編寫程式的時候,以面向對象的方式處理數據
    • 保存數據的時候,以關係型資料庫的方式存儲     

  2.  MyBatis和Spring的優點 分別是什麼?

     MyBatis:SQL語句封裝在配置文件中,便於統一管理和維護,降低程式的耦合度

                     了解底層封裝過程

                      方便程式程式碼調試

             Spring: 低侵入式設計

     獨立於各種應用伺服器

     依賴注入特性將組件關係透明化,降低了耦合度

      面向切面編程特性允許將通用任務進行集中式處理

      與第三方框架的良好整合 粘合劑

  ! !!  Spring也是輕量級框架,站式框架, 可以提供對持久層的支援, 提供Web MVC框架   

3.   MyBatis的核心對象有哪些?

        SqlSessionFactoryBuilder:

              (1.)用過即丟,其生命周期只存在於方法體內
              (2.)可重用其來創建多個 SqlSessionFactory 實例
              (3.)負責構建SqlSessionFactory,並提供多個build方法的重載—
 
         SqlSessionFactory
              (1.)SqlSessionFactory是每個MyBatis應用的核心
              (2.)作用:創建SqlSession實例
              (3.)作用域:Application 全局作用域
              (4.)生命周期與應用的生命周期相同
 
           SqlSession
             (1.)包含了執行SQL所需的所有方法
             (2.)對應一次資料庫會話,會話結束必須關閉
             (3.)執行緒級別,不能共享
             (4.)一個request請求相同
 
4.如何搭建Mybatis?

1.導入jar包

2.核心配置文件:configuration.xml

3.創建實體類

4.dao層+SQL映射文件-mapper.xml

5.創建測試類:

讀取核心文件:mybatis-config.xml

創建SqlSessionFactory對象。讀取配置文件

創建SqlSession對象

調用mapper文件進行數據操作

 
5.MyBatis框架和JDBC相比的優點:
      優點
              與JDBC相比,減少百分之50的程式碼量
              最簡單的持久化框架,小巧並簡單易學
              SQL程式碼從程式程式碼中徹底分離,可重用
              提供XML標籤 支援編寫動態SQL
              提供映射標籤,支援對象與資料庫的ORM欄位映射
       缺點
             SQL語句編寫工作量大,對其人員有一定要求
              資料庫移植性差.
 
6.resultType和resultMap的區別是什麼?
    •   resultType是直接表示返回類型 ,基本數據和複雜數據類型
    •   resultmap是對外部resultMap的引用 ,資料庫欄位資訊和實體類對象屬性不一致,複雜的聯合查詢,自由控制映射結果
    注意!! 二者不能同時存在,本質上都是Map數據結構
 
7.IOC AOP?談談你對它們的理解、
      IOC(Inversion of Control):是一種設計思想 —組件化思想,英文翻譯過來就是控制反轉—將控制權(創建對象和對象之間的依賴關係的權利)交給spring容器。
    • 控制反轉(Inversion of Control)名詞,指代內部轉外部,將組件對象的控制權從程式碼本身轉移到外部容器
    • 依賴注入(Dependency Injection):操作,在內部拿數據,將組件的構建和使用分開
    • 組件化思想:分離關注點,使用介面,不再關注實現

       補充!!!

    •  輕量級IOC容器:Pico Container、Avalon、Spring、HiveMind等。
    •  超重量級IOC容器:EJB。
    •  半輕半重IOC容器:JBoss,Jdon等。
       AOP (Aspect Oriented Programming):
             所謂面向切面編程,是一種通過預編譯和運行期動態代理的方式實現在不修改源程式碼的情況下給程式動態添加功能的技術
面向切面.
              簡單來說就是拿回來拼回去的操作;將程式邏輯相對獨立的功能抽取出來(去掉也不影響),利用spring的配置文件將這些功能插進去,提高了程式碼的復用性.
 
8.為什麼要使用IOC AOP 有什麼優點?
    •    IOC:解 耦 合—實現組件之間的解耦,實現每個組件時只關注組件內部的事情 ,提高程式的靈活性和可維護性 
    •    AOP:專心做事,作用主要是改變了OOP(Object Oriented Programming)面向對象編程的不足。
 
9. MyBatis,增刪改查個使用什麼標籤,有什麼屬性?

    • 查<select id= 「介面中的方法名resultType=”返回值類型/完全限定名parameterType=”傳入SQL語句的參數類型/完全限定名”></select>
    • 刪<delect id= 「介面中的方法名」 parameterType=「傳入SQL語句的參數類型/完全限定名」 ></delect>
    • 改<update  id= 「介面中的方法名」 parameterType=”傳入SQL語句的參數類型/完全限定名 「></update>
    • 增<insert  id= 「介面中的方法名」 parameterType=「傳入SQL語句的參數類型/完全限定名 」></insert>

!!屬性:resultType,parameterType

!!傳入SQL語句的參數類型可以是:

基礎數據類型:int,String,Date 只能傳一個,通過 #{參數名} 獲取
複雜數據類型:Java實體類,Map等 可通過 屬性名或 #{Map的keyName}獲取
10. Ajax的屬性:
    • url   「發送請求地址」
    • type   「請求方式」
    • data   「發送伺服器的數據」
    • dataType    「預期伺服器返回的數據類型」
    • success   「成功調用的」
    • error    「請求失敗調用的」