當(dāng)我們第一次使用簡(jiǎn)單的數(shù)據(jù)庫(kù)連接方式(比如 python 的 pymysql 或者 JDBC)后,會(huì)有一股莫名的成就感,感覺這種操作非常的 amazing,但是再往后就會(huì)覺得數(shù)據(jù)庫(kù)連接的處理屬實(shí)繁瑣。為了將開發(fā)者從數(shù)據(jù)庫(kù)操作的噩夢(mèng)中解救出來(lái),數(shù)據(jù)庫(kù)框架誕生了。
故事的開始
程序員張三剛接觸到 java 數(shù)據(jù)庫(kù)連接(JDBC),他覺得有了 JDBC 之后他可以使用數(shù)據(jù)庫(kù)的數(shù)據(jù),而且封裝好的 java 數(shù)據(jù)庫(kù)驅(qū)動(dòng)用起來(lái)不算復(fù)雜。一切都是那么美好,然而他不知道他的噩夢(mèng)即將來(lái)臨。
問題初現(xiàn)端倪
張三在寫 JDBC 的時(shí)候因?yàn)閷?duì) SQL 的掌握不是那么熟練,導(dǎo)致數(shù)據(jù)庫(kù)連接部分經(jīng)常出現(xiàn)一些小的錯(cuò)誤。不過(guò)好在他有個(gè)厲害的朋友李四可以幫他進(jìn)行 SQL 的排錯(cuò)和優(yōu)化,張三的開發(fā)之路還算順利。
當(dāng)需求增加時(shí)
由于項(xiàng)目的需求增加,對(duì)數(shù)據(jù)的讀寫操作也隨之增加,張三的工作量也隨之增加了很多。而且因?yàn)?SQL 掌握不好的原因,每次在寫 JDBC 代碼的時(shí)候都需要更多的時(shí)間來(lái)進(jìn)行調(diào)試。
結(jié)局與分析
在一周的工作總結(jié)中,老板對(duì)張三相當(dāng)不滿。因?yàn)樗捻?xiàng)目里面有一大部分都是 JDBC,而且很多地方有重復(fù)操作。因?yàn)榘押芏鄷r(shí)間浪費(fèi)在數(shù)據(jù)庫(kù)操作上,張三項(xiàng)目的業(yè)務(wù)代碼進(jìn)展緩慢。
張三實(shí)在是冤,因?yàn)樗恢罃?shù)據(jù)庫(kù)框架的存在,而在 JDBC 上死磕,導(dǎo)致了上面的問題。那么,什么是數(shù)據(jù)庫(kù)框架?數(shù)據(jù)庫(kù)框架其實(shí)可以看成一個(gè)類似管家的存在,只要你需要數(shù)據(jù),他就幫你進(jìn)行數(shù)據(jù)庫(kù)操作。比如 ORM 框架。ORM 框架通過(guò)對(duì)象關(guān)系模型實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作,利用對(duì)象與數(shù)據(jù)庫(kù)之間的映射結(jié)構(gòu)來(lái)自動(dòng)生成 SQL。因?yàn)?SQL 是自動(dòng)生成的,所以在使用該框架的時(shí)候甚至可以不用寫 SQL(張三瞬間覺得自己干了一些本來(lái)可以不用干的活)。
使用了 ORM 框架后,張三不需要關(guān)心 SQL 的操作,也不用在意 SQL 的優(yōu)化,業(yè)務(wù)進(jìn)展速度直接翻了好幾番。
常見的 ORM 框架
很多編程語(yǔ)言都有 ORM 框架。比如說(shuō) java 的 SSH 框架中的 Hibernate 框架,就是 ORM 框架。另外 python 的 beego 框架,Diango 框架(本身是 web 框架,內(nèi)部使用了 ORM 框架),Ruby 語(yǔ)言的 Active Record 等等也都是 ORM框架。
另一種數(shù)據(jù)庫(kù)框架
還有另一種數(shù)據(jù)庫(kù)框架,雖然它不像 ORM 那樣完全不需要寫 SQL,但是它也能減少 JDBC 代碼,比如 java 中的 MyBatis。它是一款持久層框架。通過(guò)簡(jiǎn)單的 XML 或者注解配置和映射原生信息,幾乎避免了所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。而且使用起來(lái)輕便靈活。因?yàn)榭梢宰孕卸ㄖ?SQL 語(yǔ)句,所以在效率上比 ORM 框架更高。
小結(jié)
數(shù)據(jù)庫(kù)框架的出現(xiàn),讓繁瑣的數(shù)據(jù)庫(kù)操作變得更加簡(jiǎn)潔,也讓開發(fā)者無(wú)需花費(fèi)過(guò)多的精力在 SQL 的編寫和優(yōu)化上。因?yàn)閿?shù)據(jù)庫(kù)操作繁瑣的你確定不來(lái)一份?
數(shù)據(jù)庫(kù)框架學(xué)習(xí)手冊(cè)列表: