在ORM和SQL編程之間的看似永恆的鬥爭中,出現了一個問題: 爲什麼不能同時使用?對大多數編程使用ORM,並編寫我自己的SQL查詢,用於更復雜的JOIN查詢和所選ORM無法執行的其他複雜查詢。有什麼不好的理由嗎?爲什麼不能同時使用ORM和SQL?
1
A
回答
2
大多數ORM解決方案都支持原生SQL - 例如Hibernate。
不合並兩者的原因是一致性 - 如果您必須理解從數據庫檢索數據並將它們轉換爲應用程序中的對象的兩種方式,則您有兩倍的機會記住,兩倍的機會對於錯誤和兩倍的測試(對於「連接到數據庫和檢索數據」代碼)。
實踐中發生的情況是,對ORM不熟悉的開發人員傾向於使用本機SQL,喜歡ORM工具的開發人員幾乎可以使用ORM層完成所有任務 - 這會使您的代碼庫難以維護和擴展。
如果你打算這樣做,我至少會強制執行「通過ORM工具執行SQL,而不是直接通過JDBC(或其他)」規則 - 這會至少給你一些一致性,你可以重用大量的對象映射功能。
理想情況下,選擇一個解決方案並堅持下去 - 對衝您的投注很少是免費的。
3
ORM生成的SQL大多數情況是未優化的。
建議在何處使用性能,使用ORM僅進行綁定並對所有查詢使用用戶定義的SQL。
+0
我在某處讀到ORM工具的生產者不推薦將這兩者結合起來,沒有提到任何理由。但是,當我谷歌,我幾乎沒有發現。 –
相關問題
- 1. 爲什麼我們不能在shutdown命令中同時使用/ l和/ m鍵?
- 2. 「hawq stop -M immediate」和「hawq stop -M fast」有什麼不同?
- 3. 爲什麼同時使用os.path.abspath和os.path.realpath
- 4. 爲什麼同時使用str_replace()和preg_replace()?
- 5. HTML5和Schema.org,爲什麼同時使用?
- 6. 什麼用的.h和.M
- 7. 爲什麼我不能使用ASP和SQL Server編輯記錄?
- 8. 爲什麼不能同時使用2個NetworkManagers?
- 9. 爲什麼docker不能同時使用--rm和-d運行支持?
- 10. 爲什麼不能在構造函數中同時使用this()和super()?
- 11. 爲什麼我不能同時使用DocuSign API的REST和SOAP版本?
- 12. 爲什麼我們不應該同時使用jspViewResolver和TilesViewResolver?
- 13. 爲什麼m/$。/ m會給我意想不到的行爲?
- 14. 爲什麼Genymotion和仿真器不能同時運行?
- 15. listView.setSelection(n); M = listView.getSelectedItemPosition(); // m!= n。爲什麼?
- 16. 爲什麼Java不能告訴我什麼時候我不能使用Integer?
- 17. 爲什麼不能使用LINQ爲xml
- 18. 爲什麼不同用戶的不同服務 - SQL Server 2008
- 19. 爲什麼我不能爲不同的課程使用相同的模板?
- 20. 不能使用相同的我爲不同的任務,爲什麼?
- 21. SQL Server CASE什麼時候不使用CASE什麼時候
- 22. 爲什麼在方法聲明中不能同時使用abstract和strictfp關鍵字的原因是什麼?
- 23. 爲什麼Hyperledger Fabric 1.0中的chaincode不能被同時調用?
- 24. ACID和非ACID SQL有什麼不同?
- 25. 在Elixir中,爲什麼創建地圖時不能使用不同的符號?
- 26. SQL爲什麼不使用PK索引?
- 27. CakePHP爲什麼不使用SQL連接
- 28. 爲什麼Log4perl PatternLayout中的%M和%F在特殊情況下有所不同?
- 29. 爲什麼輸出的不同之處C和Java表達式M + + +(++米)
- 30. 爲什麼SQL ID序列不同步(特別是使用Postgres)?
這似乎很好,這就是我所做的。 – Daveo