1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      精心整理了15道面試官喜歡問的MyBatis面試題

      1、什么是 MyBatis?
      答:MyBatis 是一個可以自定義 SQL、存儲過程和高級映射的持久層框架。
      2、講下 MyBatis 的緩存
      答:MyBatis 的緩存分為一級緩存和二級緩存,一級緩存放在 session 里面,默認就有,二級緩
      存放在它的命名空間里,默認是不打開的,使用二級緩存屬性類需要實現(xiàn) Serializable 序列化
      接口(可用來保存對象的狀態(tài)),可在它的映射文件中配置
      3、Mybatis 是如何進行分頁的?分頁插件的原理是什么?
      答:
      1)Mybatis 使用 RowBounds 對象進行分頁,也可以直接編寫 sql 實現(xiàn)分頁,也可以使用
      Mybatis 的分頁插件。
      2)分頁插件的原理:實現(xiàn) Mybatis 提供的接口,實現(xiàn)自定義插件,在插件的攔截方法內攔
      截待執(zhí)行的 sql,然后重寫 sql。
      舉例:select from student,攔截 sql 后重寫為:select t. from (select from student)t
      limit 0,10
      4、簡述 Mybatis 的插件運行原理,以及如何編寫一個插件?
      答:
      1)Mybatis 僅可以編寫針對 ParameterHandler、ResultSetHandler、StatementHandler、
      Executor 這 4 種接口的插件,Mybatis 通過動態(tài)代理,為需要攔截的接口生成代理對象以實
      現(xiàn)接口方法攔截功能,每當執(zhí)行這 4 種接口對象的方法時,就會進入攔截方法,具體就是
      InvocationHandler 的 invoke()方法,當然,只會攔截那些你指定需要攔截的方法。
      2)實現(xiàn) Mybatis 的 Interceptor 接口并復寫 intercept()方法,然后在給插件編寫注解,指定
      要攔截哪一個接口的哪些方法即可,記住,別忘了在配置文件中配置你編寫的插件。
      5、Mybatis 動態(tài) sql 是做什么的?都有哪些動態(tài) sql?能簡述一下動態(tài) sql 的執(zhí)行原理不?
      答:
      1)Mybatis 動態(tài) sql 可以讓我們在 Xml 映射文件內,以標簽的形式編寫動態(tài) sql,完成邏輯
      判斷和動態(tài)拼接 sql 的功能。
      2)Mybatis 提供了 9 種動態(tài) sql 標簽:
      trim|where|set|foreach|if|choose|when|otherwise|bind。
      3)其執(zhí)行原理為,使用 OGNL 從 sql 參數(shù)對象中計算表達式的值,根據(jù)表達式的值動態(tài)拼
      接 sql,以此來完成動態(tài) sql 的功能。
      6、#{}和${}的區(qū)別是什么?
      答:
      1)#{}是預編譯處理,${}是字符串替換。
      2)Mybatis 在處理#{}時,會將 sql 中的#{}替換為?號,調用 PreparedStatement 的 set 方法
      來賦值;
      3)Mybatis 在處理${}時,就是把${}替換成變量的值。
      4)使用#{}可以有效的防止 SQL 注入,提高系統(tǒng)安全性。
      7、為什么說 Mybatis 是半自動 ORM 映射工具?它與全自動的區(qū)別在哪里?
      答:Hibernate 屬于全自動 ORM 映射工具,使用 Hibernate 查詢關聯(lián)對象或者關聯(lián)集合對象
      時,可以根據(jù)對象關系模型直接獲取,所以它是全自動的。而 Mybatis 在查詢關聯(lián)對象或
      關聯(lián)集合對象時,需要手動編寫 sql 來完成,所以,稱之為半自動 ORM 映射工具。
      8、Mybatis 是否支持延遲加載?如果支持,它的實現(xiàn)原理是什么?
      答:
      1)Mybatis 僅支持 association 關聯(lián)對象和 collection 關聯(lián)集合對象的延遲加載,association
      指的就是一對一,collection 指的就是一對多查詢。在 Mybatis 配置文件中,可以配置是否
      啟用延遲加載 lazyLoadingEnabled=true|false。
      2)它的原理是,使用 CGLIB 創(chuàng)建目標對象的代理對象,當調用目標方法時,進入攔截器方
      法,比如調用 a.getB().getName(),攔截器 invoke()方法發(fā)現(xiàn) a.getB()是 null 值,那么就會單
      獨發(fā)送事先保存好的查詢關聯(lián) B 對象的 sql,把 B 查詢上來,然后調用 a.setB(b),于是 a 的
      對象 b 屬性就有值了,接著完成 a.getB().getName()方法的調用。這就是延遲加載的基本原
      理。
      9、MyBatis 與 Hibernate 有哪些不同?
      答:
      1)Mybatis 和 hibernate 不同,它不完全是一個 ORM 框架,因為 MyBatis 需要程序員自己
      編寫 Sql 語句,不過 mybatis 可以通過 XML 或注解方式靈活配置要運行的 sql 語句,并將
      java 對象和 sql 語句映射生成最終執(zhí)行的 sql,最后將 sql 執(zhí)行的結果再映射生成 java 對
      象。
      2)Mybatis 學習門檻低,簡單易學,程序員直接編寫原生態(tài) sql,可嚴格控制 sql 執(zhí)行性
      能,靈活度高,非常適合對關系數(shù)據(jù)模型要求不高的軟件開發(fā),例如互聯(lián)網(wǎng)軟件、企業(yè)運
      營類軟件等,因為這類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的
      前提是 mybatis 無法做到數(shù)據(jù)庫無關性,如果需要實現(xiàn)支持多種數(shù)據(jù)庫的軟件則需要自定
      義多套 sql 映射文件,工作量大。
      3)Hibernate 對象/關系映射能力強,數(shù)據(jù)庫無關性好,對于關系模型要求高的軟件(例如
      需求固定的定制化軟件)如果用 hibernate 開發(fā)可以節(jié)省很多代碼,提高效率。但是
      Hibernate 的缺點是學習門檻高,要精通門檻更高,而且怎么設計 O/R 映射,在性能和對象
      模型之間如何權衡,以及怎樣用好 Hibernate 需要具有很強的經(jīng)驗和能力才行。
      總之,按照用戶的需求在有限的資源環(huán)境下只要能做出維護性、擴展性良好的軟件架構都
      是好架構,所以框架只有適合才是最好。
      10、MyBatis 的好處是什么?
      答:
      1)MyBatis 把 sql 語句從 Java 源程序中獨立出來,放在單獨的 XML 文件中編寫,給程序的
      維護帶來了很大便利。
      2)MyBatis 封裝了底層 JDBC API 的調用細節(jié),并能自動將結果集轉換成 Java Bean 對象,
      大大簡化了 Java 數(shù)據(jù)庫編程的重復工作。
      3)因為 MyBatis 需要程序員自己去編寫 sql 語句,程序員可以結合數(shù)據(jù)庫自身的特點靈活
      控制 sql 語句,因此能夠實現(xiàn)比 Hibernate 等全自動 orm 框架更高的查詢效率,能夠完成復
      雜查詢。
      11、簡述 Mybatis 的 Xml 映射文件和 Mybatis 內部數(shù)據(jù)結構之間的映射關系?
      答:Mybatis 將所有 Xml 配置信息都封裝到 All-In-One 重量級對象 Configuration 內部。在
      Xml 映射文件中,標簽會被解析為 ParameterMap 對象,其每個子元素會
      被解析為 ParameterMapping 對象。標簽會被解析為 ResultMap 對象,其每個子
      元素會被解析為 ResultMapping 對象。每一個

      <i id="lznn3"></i>