ORM就是對象-關(guān)系映射,比如Hibernate。
  大多 " /> 特大巨黑人吊性xxxxgay,亚洲 欧美 日韩 精品 自拍,亚洲欧美激情精品一区二区

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

談?wù)勅绾螐谋举|(zhì)上理解SQL語句、存儲過程與ORM之間的聯(lián)系和取舍

  sql語句又叫ad hoc sql, ad hoc是拉丁語,意思是for this,可以翻譯為“按每一次情況的辦理”。

  存儲過程就是stored procedure, 簡寫為sp。
  ORM就是對象-關(guān)系映射,比如Hibernate。
  大多數(shù)的.NET程序都是會圍繞sql服務(wù)器展開,經(jīng)常要面臨在這些技術(shù)間進(jìn)行選擇。所以我們需要來理解這些技術(shù)的本質(zhì)。
  一,演變
  剛開始的時候,只有sql語句,即可以用交互模式一句一句執(zhí)行, 也可以用批模式執(zhí)行,多行sql語句一次提交執(zhí)行。
  很快人們發(fā)現(xiàn)用批模式執(zhí)行的一堆sql語言可以用過程的形式,事先存放到數(shù)據(jù)庫里面,這就變成了存儲過程。
  隨著面向?qū)ο蠹夹g(shù)的成熟,從程序中可以自動生成sql語句,這就是ORM。

  二,性能

  很多人會說存儲過程比sql語句性能好,其實這個說法并不精確。
  如果我們把一堆sql,以批的方式一次送入到服務(wù)器,那么服務(wù)器,會對這一堆sql進(jìn)行緩存,當(dāng)下一次再度執(zhí)行的時候,就好像調(diào)用一個”匿名“的存儲過程一樣。
  在這種情況下,性能差不多。
  但是,如果我們不注意,很有可能,把可以一次提交的sql,變成了多次提交,甚至是每個循環(huán)做了一次提交,那么性能就很差了。
  也就是說如果使用sql,只要寫法得當(dāng),性能和sp區(qū)別不大。

  同樣的道理,ORM的性能取決于ORM的Sql生成算法, 和用戶使用的時候,對生成算法的控制,比如利用好Lazy laoding等,在某些情況下,甚至可以不通過sql,畢竟沒有sql比最優(yōu)化的sql還要快。

  三,可維護(hù)性

  可維護(hù)性是選擇sql,sp,orm最主要的因素。

  這里面有點”玄“,因為不同的場景會得出不同的結(jié)論,俗稱“It depends"。

  剛開始的時候,sql的維護(hù)性看起來是最差,因為它往往散布在程序的每個角落。而存儲過陳都放在數(shù)據(jù)庫中,有清晰接口。
  但是如果我們做一次重構(gòu),情況居然會顛倒過來。

  首先,存儲過程完全可以照搬到C#中,sp的名字直接變成method的名字,sp的參數(shù)表直接變成method的參數(shù)表,(其實就是Command模式)。

  其次,把這些methdod放到一個文件或者文件夾中。(所謂的DAL層,如果喜歡層的話)

  通過這個重構(gòu),我們獲得了以下的好處:

  1,首先是過程的調(diào)用和過程的定義放到了一起,修改起來比較方便。IDE都有定義跳轉(zhuǎn)功能。
  2,過程的調(diào)用和定義同時進(jìn)行版本控制,不會出現(xiàn)不匹配的情況。減少了sp的參數(shù)表和調(diào)用的不匹配,包括拼寫,類型,參數(shù)次序
  3,單元測試非常方便

  當(dāng)然sp也有存在的價值,比如所謂的安全性,后面會提到。比如友好的調(diào)試環(huán)境,對于中小型項目,和初級程序員來說,也是很好的選擇。

  ORM則將可維護(hù)性提升身到了一個新的高度,它試圖將sql屏蔽起來,在操作對象的同時,自動就把數(shù)據(jù)庫的事情給辦了。

  ORM有兩種模式,一種是ActiveRecord, 一種是Datamapper,前者從數(shù)據(jù)庫中讀取定義,后者在程序中定義。不過由于前者往往用migration來生成數(shù)據(jù)庫,其實也是定義在程序里面的。好的ORM都有"leaking"的設(shè)計,也就是留了個”后門“,讓你有機(jī)會用sql來控制。

  微軟的linq從某個角度類說,也是一種ORM, 它的設(shè)計思想可能是因為它覺得寫sql語句比寫c#代碼效率高,所以提供直接在C#中寫sql語句的機(jī)制,再自動生成真正的sql。不過,ORM真正價值在于它可以在恰當(dāng)?shù)臅r候,完全拋棄sql,比如比如讀用cache,寫用queue。而微軟的linq,完全是“無厘頭”的風(fēng)格,在O中用R的寫法,難道是RRM, 唯一的好處只是鎖定程序和程序員在微軟的平臺上。

  四,安全性

  對企業(yè)來說,安全性有的時候比性能更重要,由于存儲過程在數(shù)據(jù)庫上多加了一道屏障,所以很多企業(yè)會把存儲過程作為首選。

  ORM可以說是安全性最差的, 因為只有到程序運(yùn)行起來,你才能知道,會產(chǎn)生什么樣的sql。

  但是保證安全有許多方法和方面,比如部署前的測試, 數(shù)據(jù)庫的備份,對表的權(quán)限的設(shè)置。等。用sp來保證安全,只是多個選項中的一個。

  在startup型企業(yè)中,高級程序員往往起到主導(dǎo)作用, 所以他們會不猶豫的選擇ORM。

  在傳統(tǒng)企業(yè)中,如果DBA或者技術(shù)主管比較強(qiáng)勢,往往會采用sp。

it知識庫談?wù)勅绾螐谋举|(zhì)上理解SQL語句、存儲過程與ORM之間的聯(lián)系和取舍,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久久久亚洲精品影视 | 芳草地在线观看免费视频 | 天天插天天舔 | 精品国产在线国语视频 | 亚洲欧美中文字幕高清在线 | YELLOW日本动漫免费动漫 | 妖精视频免费看 | 亚洲中文字幕手机版 | 在线免费观看视频a | 性夜a爽黄爽| 中文字幕高清在线中文字幕 | 学生精品国产在线视频 | 美女PK精子小游戏 | 伦理电影v男人天堂 | 无限资源在线观看播放 | 果冻传媒免费观看 | 亚洲人成人77777在线播放 | 久久婷婷国产五月综合色啪最新 | 国产人妻XXXX精品HD电影 | 亚洲日韩中文字幕日本有码 | 成人在线视频免费观看 | 国产午夜精品一区二区 | 一级做a爰片久久毛片一 | 国产日韩亚洲专区无码 | 台湾佬休闲中性娱乐网 | 国产亚洲精品久久久999无毒 | 日本视频中文字幕一区二区 | 怡春院国产精品视频 | 天天操天天干天天透 | 国产成人在线小视频 | 精品一区二区三区高清免费观看 | 欧美白人极品性喷潮 | 色狐直播免费观看 | 久久视频这里只精品99热在线观看 | 美艳人妻在厨房翘着屁股 | 精品国产自在现线拍国语 | 精品人伦一区二区三区潘金莲 | 无码国产精品高潮久久9 | 丝瓜视频樱桃视频在线观看免费 | jizz中国女人| 黄色三级视频在线 |