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中文網其他相關文章!