現有一些ORM工具的弊端

2021-04-13 13:36:33 字數 1708 閱讀 5619

現在流行很多orm工具,其中hibernate算做得很好的了,使用的人群也非常多,而且大做都在說好,為什麼訥?使用簡單,開發比較快速,但是問題也隨之而來了....

orm能做什麼?幫你用物件的方式來操作rdbms,這是很多人渴望的,因為他不再需要關心底層資料庫是怎麼工作的了,甚至不需要知道資料庫的結構,一切都交給orm去管理了,看起來是非常好的,程式非常直觀,寫起來也容易,但是執行起來呢?

事實上,開發者使用orm工具時,最痛苦的也許就是dba了,作為dba,要保證整個系統的效能,必需對一些執行不好的sql進行tuning,做一些優化,調整其執行計畫,是整個應用的效能及穩定性提高,但是當他們發現有sql效能不好,需要找程式設計師協調修改時,得到的回答是:"我們使用*** (某orm工具),sql都是他生成出來的,我沒辦法調整",ft,你不調整,難道我來啊?最終結果呢,程式跑不動,該改得還是得改,管你用什麼***, 這時候也許就會覺得痛苦了吧?

原來orm並沒那麼好用?sure,object的世界和relational的世界本來就不能很好的對映,就不要要求他那麼完美了吧!

那要麼我就就用原始的sql語句,在程式裡直接用jdbc操作,這總不會有什麼限制了吧,是的,你用sql語句能做的東西你都能做,但是怎麼做訥?

connection conn = null;

statement stmt = null;

resultset rs = null;

log.info("==sql==:" + sql);

try finally

ft,大哥,太麻煩了吧,每查這麼一次就要寫這麼多東西啊,我真的只需要執行語句sql語句而已啊,

是的,你只需要執行易於sql語句,但是你必需這麼做

不管怎麼,麻煩是麻煩了,但總能工作了吧,返回結果呢?resultset,我不覺得他很合適,connection一關了他就不能用了,要是不關訥,等我用完了再關,(不是吧,那是connection訥,很金貴的,hint:對於"貴重"的資源在真正需要時才使用,而且用完了馬上釋放掉,誰讓他那麼寶貴訥),於是,在讀出資料之前,現把結果拿出來,關掉connection,返回,這裡可以做一些工作,讓你的resultset裡取得的資料返回得更漂亮一些,做一些對映,放到一些簡單的bean裡返回給上層使用

相比之下,大多數人都選擇orm和jdbc結合使用的辦法,簡單的crud操作,就讓orm去做吧,簡單,省心,開發效率高,的確是這樣,其他的工作訥, 不要勉強你的orm工具,也不要說他不夠完美,事實就是這樣,object 和 relational本來就不是一樣的東西,哪能那麼完美的對映訥?

那我們就這麼用吧,但是問題又來了,你寫在程式裡的sql,;儘管是少數,但這些都是比較複雜的了(不是麼?),執行了一段時間,dba又來找了:

那個誰誰誰,你的這個sql需要搞一下,要加個hint,調整一下執行計畫,否則資料庫的cost太大了

不是吧?又要改?(怎麼說又?難道不是麼,改的還少了?)

於是就修改,編譯,打包,測試,發布.........dba又來了....(怕怕)

於是就有了ibatis,他是乙個什麼東西呢?基本上,他有兩部分內容:sql map 和 dao.

sql map是核心的內容,負責將你某一次操作影射到乙個sql語句上去執行,當然,這個sql語句是可以預見並且非常靈活且容易調整的,dao是乙個上層一點的封裝,目的是為了讓整個應用更加靈活,自由

使用ibatis最大的**就是,系統執行的所有sql語句,你都可以在程式以外進行調整,功能上的可以開發者來做,效能上的麼,把你的配置檔案給dba,他會給你做好的,很輕鬆,不是麼? 

關於ORM的一些體會

最近專案用到sqlite資料庫,嫌麻煩做了個根據資料庫表結構生成c 的工具,把錶結構和entity類進行一一對應,也算是乙個小的orm框架。本想再做的徹底一點,在entity上再封一層model類,把外來鍵關係 當然表上沒有 體現 也關聯起來,並通過乙個context類把model的操作託管起來,使...

新手部落格容易出現的一些弊端

姜敏的部落格運營半年時間以來,一直得益於各博友的鼎力支援,使得小博的評論交流氣氛非常活躍,想藉此向各博友們說聲謝謝!期間我也拜訪過不少部落格學習與交流,發現小部分新手博主的一些不良細節,想藉此談談自己對新手玩部落格的一點點看法,希望大家能盡量避www.cppcns.com開這些弊端,給部落格乙個良好...

一些瑣碎的工具

安裝過程中有很多瑣碎的問題。1.webmatrix新建mysql連線可以直接連線上,用sql檔案重建資料庫,webmatrix好像做不到,又沒有裝phpmyadmin.兩個方法 用cmd的mysql命令 或者用mysql workbench也可以做到。執行完後是重新建立了乙個database,ken...