ORM就是對(duì)象-關(guān)系映射,比如Hibernate。
  大多 " /> 亚洲成av人影院,国产乱码精品一区二区三区四川 ,暖暖免费观看日本在线视频

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

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

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

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

  二,性能

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

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

  三,可維護(hù)性

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

  這里面有點(diǎn)”玄“,因?yàn)椴煌膱?chǎng)景會(huì)得出不同的結(jié)論,俗稱(chēng)“It depends"。

  剛開(kāi)始的時(shí)候,sql的維護(hù)性看起來(lái)是最差,因?yàn)樗⒉荚诔绦虻拿總€(gè)角落。而存儲(chǔ)過(guò)陳都放在數(shù)據(jù)庫(kù)中,有清晰接口。
  但是如果我們做一次重構(gòu),情況居然會(huì)顛倒過(guò)來(lái)。

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

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

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

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

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

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

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

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

  四,安全性

  對(duì)企業(yè)來(lái)說(shuō),安全性有的時(shí)候比性能更重要,由于存儲(chǔ)過(guò)程在數(shù)據(jù)庫(kù)上多加了一道屏障,所以很多企業(yè)會(huì)把存儲(chǔ)過(guò)程作為首選。

  ORM可以說(shuō)是安全性最差的, 因?yàn)橹挥械匠绦蜻\(yùn)行起來(lái),你才能知道,會(huì)產(chǎn)生什么樣的sql。

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

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

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

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

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

主站蜘蛛池模板: 一级做a爰片久久毛片潮喷动漫 | my pico未删减在线观看 | 久久久无码精品无码国产人妻丝瓜 | 特级黑人三人共一女 | 思思久久99热只有频精品66 | 国产欧美国日产在线播放 | 午夜亚洲WWW湿好爽 午夜亚洲WWW湿好大 | 俄罗斯黄色大片 | brazzers巨臀系列 | 中国少妇内射XXXX狠干 | 国产精品乱码色情一区二区视频 | 伊人久久精品AV无码一区 | 淫品色影院 | 青青草A在在观免费线观看 青青草AV国产精品 青青草 久久久 | 在教室伦流澡到高潮H女攻视频 | 夜蒲团之5阳性之教 | 国产午夜免费不卡精品理论片 | 最近中文字幕在线看免费完整版 | 久久婷婷丁香五月色综合啪免费 | 99久久精品久久久久久清纯 | 青青青青青青草 | 日本理伦片午夜理伦片 | 人人澡人人擦人人免费 | 小莹的性荡生活40章 | yw193龙物免费官网在线 | 99久久久A片无码国产精 | 人妻熟妇乱又伦精品视频中文字幕 | 强奸美女老师 | 秋霞电影网午夜免费鲁丝片 | 成人国产在线看不卡 | 暖暖免费观看日本在线视频 | 欧美AAAA片免费播放观看 | 一个吃奶两个添下面H | 国产在线视频分类精品 | 99久久免费精品国产 | 久久久久久电影 | 国产在线亚洲精品观看不卡 | 萝莉御姐被吸奶 | 亚洲精品视频久久 | 草民电影网午夜伦理电影网 | 国产精品一区二区免费 |