首頁  >  文章  >  Java  >  java持久層面試題目(二)

java持久層面試題目(二)

王林
王林轉載
2020-03-20 18:17:552281瀏覽

java持久層面試題目(二)

1、解釋MyBatis中命名空間(namespace)的功能。

在大型專案中,可能存在大量的SQL語句,這時候為每個SQL語句起一個唯一的識別(ID)就變得不容易了。為了解決這個問題,在MyBatis中,可以為每個映射檔案起一個唯一的命名空間,這樣定義在這個映射檔案中的每個SQL語句就成了定義在這個命名空間中的一個ID。

只要我們能夠保證每個命名空間中這個ID是唯一的,即使在不同映射檔案中的語句ID相同,也不會再產生衝突了。

(推薦教學:java快速入門

2、MyBatis中的動態SQL是什麼意思?

對於一些複雜的查詢,我們可能會指定多個查詢條件,但是這些條件可能存在也可能不存在,如果不使用持久層框架我們可能需要自己拼裝SQL語句,不過MyBatis提供了動態SQL的功能來解決這個問題。

MyBatis中用來實現動態SQL的元素主要有:

- if    - choose / when / otherwise    - trim    - where  # ##

   <select id="foo" parameterType="Blog" resultType="Blog">        
   select * from t_blog where 1 = 1
        <if test="title != null">            
           and title = #{title}
        </if>
        <if test="content != null">            
           and content = #{content}
        </if>
        <if test="owner != null">            
           and owner = #{owner}
        </if>
   </select>

3、JDBC程式設計有哪些不足之處,MyBatis是如何解決這些問題的?     

   

(1)JDBC:資料庫連結建立、釋放頻繁造成系統資源浪費進而影響系統效能,若使用資料庫連結池可解決此問題。

MyBatis:在SqlMapConfig.xml中設定資料連結池,使用連接池管理資料庫連結。

(2)JDBC:Sql語句寫在程式碼中造成程式碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java程式碼。

MyBatis:將Sql語句配置在XXXXmapper.xml檔案中與java程式碼分開。

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

MyBatis: Mybatis自動將java物件對應至sql語句。

(4)JDBC:對結果集解析麻煩,sql變化導致解析程式碼變化,且解析前需要遍歷,如果能將資料庫記錄封裝成pojo物件解析比較方便。

MyBatis:Mybatis自動將sql執行結果對應至java物件。

4、MyBatis與Hibernate有哪些不同?

(1)Mybatis和hibernate不同,它不完全是一個ORM框架,因為MyBatis需要程式設計師自己寫Sql語句,不過mybatis可以透過XML或註解方式靈活地設定要執行的sql語句,並將java物件和sql語句映射產生最終執行的sql,最後將sql執行的結果再映射產生java物件。

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

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

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

5、簡單的說一下MyBatis的一級快取和二級快取?

Mybatis先到快取中查詢結果集,如果沒有則查詢資料庫,如果有則從快取取出回傳結果集就不走資料庫。 Mybatis內部儲存快取使用一個HashMap,key為hashCode sqlId Sql語句。 value為從查詢出來對應產生的java物件。

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

相關影片教學推薦:

java影片教學

#

以上是java持久層面試題目(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除