這邊主要是寫給那些准備去面試的(沒什么經驗的)應聘者看的,為了在面試中更好的回答這個問題,我做一個簡單的梳理和總結。
作為一名職場新人,經歷過多次的面試,由於在簡歷中提及了Hibernate和MyBatis,所以經常被問到。這個問題你如果真的很懂,那就可以說的很詳細,如果也只是用過一點點,那就只要說個大概就行。
總結如下:
說起Hibernate和MyBatis最大的區別,用很寬泛的話講就是hibernate是自動的,mybatis是半自動的。自動指的是hibernate因為有良好的映射機制,針對高級查詢,也可以不必手動編寫sql,開發者可以更關注於業務邏輯而不用擔心sql的生成和結果映射。mybatis半自動指的是它在做高級查詢時,必須手動寫sql以及resultMap。所以說,mybatis比hibernate開發工作量大。
第二點就是在sql優化方面,hibernate默認是會把表中所有的列都查出來的,而mybatis是自己指定要查哪些列。當然,hibernate允許自己指定查什么,但是就會破壞hibernate開發的簡潔性。所以mybatis在sql優化上還是比hibernate靈活的。
第三點hibernate自帶日志統計,而mybatis需要依靠log4j來實現
第四點hibernate強大的數據庫無關性,只需在xml文件中配置驅動和方言,就可以實現和不同數據庫的交互。而mybatis的所有sql和所使用的數據庫有直接關系,一旦變更數據庫,那么你的sql語句基本就是要修改了。
第五點隨便提一句,mybatis比hibernate更加適合開發復雜查詢的項目,且更容易上手,從第一點就可以看出來。