maven面試,面試之mybatis和hibernate的區別

 2023-11-19 阅读 25 评论 0

摘要:mybatis是支持普通SQL查詢、存儲過程和高級映射的優秀持久層框架。封裝了?幾乎所有的JDBC代碼和參數的手工設置?,以及結果集的檢索: 封裝了:1,獲取連接,執行sql,釋放連接。 ??????????????2,sql的參數設置,屬性自動傳

mybatis是支持普通SQL查詢、存儲過程和高級映射的優秀持久層框架。封裝了?幾乎所有的JDBC代碼和參數的手工設置?以及結果集的檢索:

封裝了:1,獲取連接,執行sql,釋放連接。

??????????????2,sql的參數設置,屬性自動傳遞參數(例如emp有name和age屬性,sql語句寫成“insert into emp (name,age) values(#{name},#{age})”就可以了,不用像jdbc ?????????????????? 一樣還要用preparedstatement對象設置參數ps.setString(1,“xiaoming”)

maven面試???????????????3,封裝了記錄映射成實體對象的的過程,(jdbc要自己寫rowmapper)

hibernate也是當前流行的orm工具,訪問數據庫的框架,對數據結構提供了較完整的封裝。

封裝了:1,獲取連接,sql編寫,執行sql,釋放連接。

??????????????2,sql參數設置,

idea和jdk,????????????? 3,記錄封裝成實體對象等一系列過程。

對比上面兩個,一目了然,hibernate相比mabatis居然連sql編寫也封裝了。這點本質的不同,是mybatis與hibernate的最大區別,很多網上寫的區別,看起來很亂,很頭大其實大多都是從這點引發出來的。

接下來我們一點一點的說。

區別一:擴展性方面。使用mybatis要自己根據相應的數據庫寫不同的sql實現,例如用MySQL數據庫寫了一個sql的分頁語句,如果換成了oracle數據庫就用不了了。然而如果是hibernate的hql語句則是對實體類(User)和屬性的操作,也拿分頁查詢來說,string hql=“from User”; Query q1=session.creatQuery(hql); q1.setFirstResult(m);q1.setMaxResult(n);?? List<User> list=q1.list();會根據具體的數據庫生成各自相應不同的查詢的語句,所以移植性很好。

Mybatis框架?區別二:sql效率,優化方面。Hibernate的查詢,更新都是對所有字段的操作例如(根據id查詢,sessin.get(User.class,"id"),還有要session.update(對象)時,按照對象的id做條件,更新其他字段信息。如果想要更新部分字段,其他字段保持不變,則對象的其他字段對應的屬性也要有原值),這一點會有性能消耗。Hibernate也可以自己寫SQL來指定需要查詢的字段,但這樣就破壞了Hibernate開發的簡潔性。而Mybatis的SQL是手動編寫的,所以可以按需求指定查詢的字段。maybatis的優化,就是對sql語句的優化,MyBatis在Session方面和Hibernate的Session生命周期是一致的,同樣需要合理的Session管理機制。hibernate的優化(可以記一下):

  1. 制定合理的緩存策略;
  2. 盡量使用延遲加載特性;
  3. 采用合理的Session管理機制;
  4. 使用批量抓取,設定合理的批處理參數(batch_size);
  5. 進行合理的O/R映射設計

?

還有一點被面試問到過,就是sql和hql形式上的區別。個人認為屬于第一點區別:

?????? sql: select 字段名...from table_name? where? 字段名...?? sql是直接對數據庫表的操作

hibernate??????? hql:select 屬性名...from 實體類 where 屬性 條件 ...group by?屬性order by屬性。hql是對與表有映射關系的實體類的操作,底層會再自動生成相應的sql。??

?

以上點就是最大的區別了。當然網上還有說對象管理和抓取策略,緩存機制什么的,太高級了這里不再討論了。附上連接:

http://blog.csdn.net/firejuly/article/details/819022

Mybatis,轉載于:https://www.cnblogs.com/huangwentian/p/6926922.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/180018.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息