国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

使用Node.js實(shí)現(xiàn)ORM的一種思路

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 20:07:44
文檔

使用Node.js實(shí)現(xiàn)ORM的一種思路

使用Node.js實(shí)現(xiàn)ORM的一種思路:ORM是O和R的映射。O代表面向?qū)ο螅琑代表關(guān)系型數(shù)據(jù)庫。二者有相似之處同時(shí)也各有特色。就是因?yàn)檫@種即是又非的情況,才需要做映射的。本文主要介紹了用Node.js實(shí)現(xiàn)ORM的一種思路詳解(圖文),需要的朋友可以參考下,希望能幫助到大家。 理想情況是,根據(jù)關(guān)系型
推薦度:
導(dǎo)讀使用Node.js實(shí)現(xiàn)ORM的一種思路:ORM是O和R的映射。O代表面向?qū)ο螅琑代表關(guān)系型數(shù)據(jù)庫。二者有相似之處同時(shí)也各有特色。就是因?yàn)檫@種即是又非的情況,才需要做映射的。本文主要介紹了用Node.js實(shí)現(xiàn)ORM的一種思路詳解(圖文),需要的朋友可以參考下,希望能幫助到大家。 理想情況是,根據(jù)關(guān)系型
ORM是O和R的映射。O代表面向?qū)ο螅琑代表關(guān)系型數(shù)據(jù)庫。二者有相似之處同時(shí)也各有特色。就是因?yàn)檫@種即是又非的情況,才需要做映射的。本文主要介紹了用Node.js實(shí)現(xiàn)ORM的一種思路詳解(圖文),需要的朋友可以參考下,希望能幫助到大家。

  理想情況是,根據(jù)關(guān)系型數(shù)據(jù)庫(含業(yè)務(wù)需求)的特點(diǎn)來設(shè)計(jì)數(shù)據(jù)庫。同時(shí)根據(jù)面向?qū)ο螅ê瑯I(yè)務(wù)需求)的特點(diǎn)來設(shè)計(jì)模型(實(shí)體類)。然后再去考慮如何做映射。但是理想很骨jian感dan,現(xiàn)實(shí)太豐fu滿za。

  沒見哪個(gè)ORM是這么做的,也沒見哪位高手會(huì)這么做設(shè)計(jì)。那么實(shí)際情況是什么樣子的呢?以.net的Entity Framework為例。

  DB frist,就是先設(shè)計(jì)好數(shù)據(jù)庫,然后根據(jù)庫里的表、主外鍵等自動(dòng)創(chuàng)建實(shí)體類。然后可以通過LinQToSQL來操作。這樣創(chuàng)建出來的實(shí)體類顯然缺乏面對(duì)對(duì)象的特色。

  Code frist,就是先設(shè)計(jì)實(shí)體類,然后根據(jù)實(shí)體類和特性來自動(dòng)創(chuàng)建表和主外鍵、約束等。而為了嚴(yán)謹(jǐn),定義實(shí)體類的時(shí)候需要說明一下主外鍵等具有關(guān)系型特色的東東。

如下圖

  現(xiàn)在想用node來做一套引擎。剛剛接觸node,估計(jì)會(huì)有現(xiàn)成的orm吧,不知道他們是怎么做的,先不管他們了,先把自己的思路弄清楚再說,恩恩。

  為啥要選擇node呢?以為他原生支持json。Json在前端那是主場(chǎng),js原生支持json,各種操作都非常流暢舒服。但是json到了后端(C#)就麻煩了,C#原生不支持json,只能作為字符串,或者實(shí)體類序列化的形態(tài)。這就需要轉(zhuǎn)來轉(zhuǎn)去的,很是麻煩。

  而采用node那么后端也可以用js來編碼,也就是說會(huì)原生支持json。這就舒服多了。想想,前端創(chuàng)建json(實(shí)體類),然后整個(gè)提交給后端,后端接到j(luò)son直接進(jìn)行處理(安全驗(yàn)證、業(yè)務(wù)處理),然后直接持久化。是不是很爽!

  采用node還有一個(gè)好處,那就是他可以在運(yùn)行時(shí)定義實(shí)體類的屬性,比如增加屬性。這個(gè)在C#里是無法實(shí)現(xiàn)的。

  為啥一定要運(yùn)行時(shí)可以修改實(shí)體類?因?yàn)檫@樣做可以避免實(shí)體類數(shù)量爆炸。

  打開你的項(xiàng)目,數(shù)一數(shù)定義了多少的實(shí)體類?是不是項(xiàng)目越大實(shí)體類就越多?當(dāng)需要發(fā)生變化,需要給實(shí)體類增加一個(gè)屬性的時(shí)候,是不是需要各種改代碼?雖然VS可以幫我們做很多工作。

  所以說還是在運(yùn)行時(shí)可以隨意修改實(shí)體類的好,這樣可以極大地避免修改代碼的問題。(因?yàn)楦揪蜎]有啥代碼)

  這一篇主要是說思路,所以先簡(jiǎn)單設(shè)計(jì)一個(gè)json來表示一下。

  設(shè)計(jì)這個(gè)json的目的是,引擎可以根據(jù)json的情況來拼接成SQL,然后交給數(shù)據(jù)庫處理。

{
 "operationMode":"add",// add\update\delete\select
 "tableCount":1, //支持多表的級(jí)聯(lián)添加、修改
 "fieldInfo":[{//主表的字段,參與操作的字段,不參與的不用寫。第一個(gè)字段是主鍵(不支持多主鍵)
 "tableName": "t1", //表名。
 "primaryKey":"id",//主鍵字段名。我不想把主鍵字段名限制為必須是“ID”
 "_sqlCache": "" ,//緩存的sql語句,每次都拼接sql也挺煩的,弄個(gè)緩存存放拼接好的sql。
 "fieldList":{ //涉及到的字段,并不需要把表里的字段都放進(jìn)來,根據(jù)業(yè)務(wù)需求設(shè)計(jì)
 //客戶端提交的json與之對(duì)應(yīng)
 "field1Name":"field1Value",
 "field2Name":"field2Value"
 }
 },
 { //從表的字段,可以不設(shè)置
 "primaryKey": "id", //主鍵字段名。我不想把主鍵字段名限制為必須是“ID”
 "foreignKey": "foreignKeyid", //主鍵字段名。我不想把主鍵字段名限制為必須是“ID”
 "_sqlCache": "", //緩存的sql語句,每次都拼接sql也挺煩的,弄個(gè)緩存存放拼接好的sql。
 "fieldList": { //涉及到的字段(不含外鍵字段),并不需要把表里的字段都放進(jìn)來,根據(jù)業(yè)務(wù)需求設(shè)計(jì)
 //客戶端提交的json與之對(duì)應(yīng)
 "field1Name": "field1Value",
 "field2Name": "field2Value"
 }
 } // 從表的字段,參與操作的字段,不參與的不用寫。第一個(gè)字段是主鍵,第二個(gè)字段是外鍵
 ],
 "findCol":[{
 "colName":"col1",
 "key1":"abc",
 "key2":"abc", //范圍查詢時(shí)使用,比如從幾號(hào)到幾號(hào)
 "findKind":" {colName} like {key}" //查詢方式:like、not Like、in、=、between等
 }]
}

  一般的ORM是以實(shí)體類為核心,要求實(shí)體類的完整,就說一個(gè)實(shí)體類要和一個(gè)完整的表做映射。比如要下架一個(gè)商品,一般的做法是先把這個(gè)商品從數(shù)據(jù)庫里讀取出來實(shí)例化之后,修改標(biāo)記屬性(字段),然后再把整個(gè)實(shí)體類持久化(保存到數(shù)據(jù)庫)。

  但是SQL怎么寫呢?一個(gè)update就可以了,不用讀取數(shù)據(jù)的,這樣效率就有點(diǎn)損耗。

  那么如果要把一個(gè)分類的商品都下架呢?要把這個(gè)分類里的商品都折騰出來,然后批量改屬性值,在批量持久化。

  如果寫SQL語句呢?還是那一句SQL,只不過是把查詢條件換一下,還是不需要折騰數(shù)據(jù)。這種情況下效率的差別就很大了。

  而我的這個(gè)思路呢,并不是以面向?qū)ο鬄楹诵牡模且躁P(guān)系型數(shù)據(jù)庫為核心。

  就是說不會(huì)把實(shí)體類和表做整體的映射,而是會(huì)把屬性和字段做映射。就是說把一個(gè)表里的部分字段拿出來,做成一個(gè)實(shí)體類,然后進(jìn)行操作。比如下架商品的例子

表:商品表

字段:isxiajia = 1

條件:id=1(單商品下架) cate=2 (按照分類下架)

然后生成update語句就可以了。

  這是一個(gè)獨(dú)立的“實(shí)體類”,這個(gè)類里面并不需要商品的其他屬性,因?yàn)橹皇窍录懿僮鳌A硗獠樵儣l件也完全放開,不是僅僅依據(jù)ID查詢,還可以按照其他字段來查詢,比如分類字段。這樣效率就可以得到提升。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

使用Node.js實(shí)現(xiàn)ORM的一種思路

使用Node.js實(shí)現(xiàn)ORM的一種思路:ORM是O和R的映射。O代表面向?qū)ο螅琑代表關(guān)系型數(shù)據(jù)庫。二者有相似之處同時(shí)也各有特色。就是因?yàn)檫@種即是又非的情況,才需要做映射的。本文主要介紹了用Node.js實(shí)現(xiàn)ORM的一種思路詳解(圖文),需要的朋友可以參考下,希望能幫助到大家。 理想情況是,根據(jù)關(guān)系型
推薦度:
標(biāo)簽: 思路 or 的思路
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产国语在线播放视频 | 欧美极品第一页 | 日韩精品第二页 | 亚洲欧美天堂网 | 国产一区精品在线观看 | 亚洲日韩精品欧美一区二区 | 91高清免费视频 | 国产精品成人69xxx免费视频 | 日韩一区二区在线免费观看 | 在线视频观看国产 | 日韩精品成人 | 特黄一级毛片 | 国产中的精品一区的 | 欧美 日韩 国产 色 欧美 日韩 中文 | 国产成人精品久久二区二区 | 一区二区三区福利 | 亚洲va乱码一区二区三区 | 亚洲美女一区二区三区 | 免费国产va在线观看视频 | 特黄一级毛片 | 亚洲精品乱码久久久久 | 欧美一区二区三区视频在线观看 | 美女视频黄a视频免费全过程在线 | 国产第二十页 | 国产91成人精品亚洲精品 | 在线欧美日韩制服国产 | 欧美午夜视频在线 | 精品一区二区三区四区五区 | 久久99精品国产麻豆宅宅 | 日韩欧美一区二区三区视频 | 国产中文字幕在线 | 日韩有码电影 | 最近中文字幕电影在线看 | 国内精品一区二区2021在线 | 欧美日韩综合 | 一区二区免费在线观看 | 中文字幕 日韩有码 | 91精品久久久久 | 免费高清欧美大片在线观看 | 国产精品久久久久影院 | 日韩在线欧美在线 |