黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 什么是ORMapping?

什么是ORMapping?

來(lái)源:千鋒教育
發(fā)布人:qyf
時(shí)間: 2022-10-10 16:59:14 1665392354

  ORM :對(duì)象關(guān)系映射(英語(yǔ):Object Relational Mapping,簡(jiǎn)稱(chēng)ORM,或O/RM,或O/R mapping),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z(yǔ)言里不同類(lèi)型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。

  O(面向?qū)ο? <-----> ORMapping <-----> R(面向關(guān)系)

  在數(shù)據(jù)庫(kù)層面, 尤其是關(guān)系型數(shù)據(jù)庫(kù). 是沒(méi)有對(duì)象概念的.

  有的只是表格, 和數(shù)據(jù)記錄

圖片34

  想象一下, 如果你在某個(gè)視頻網(wǎng)站, 為某個(gè)視頻寫(xiě)了一條評(píng)論

  接下來(lái)會(huì)發(fā)生什么呢?

  我們要更改用戶(hù)表的記錄, 增加評(píng)論數(shù)

  用SQL語(yǔ)句進(jìn)行操作

  update t_user set .......

  可是我們平時(shí)都是面向?qū)ο缶幊痰?/p>

  從邏輯上講

  我們的代碼應(yīng)該是這樣寫(xiě)的

  video.cmmt_cnt++;

  這樣就夠了嗎? 當(dāng)然不夠

  我們還需要增加評(píng)論表

圖片35

  還不止這些

  如果這條評(píng)論被置頂了呢

  如果這條評(píng)論對(duì)其他人不可見(jiàn)呢?

  如果這條評(píng)論@了其他人呢

  如果這條評(píng)論被人點(diǎn)贊了呢

  只要稍微增加一點(diǎn)功能, 邏輯都會(huì)變得復(fù)雜很多

  一個(gè)看似簡(jiǎn)單的添加評(píng)論, 其實(shí)背后并不簡(jiǎn)單

  顯然操作數(shù)據(jù)庫(kù), 跟實(shí)現(xiàn)業(yè)務(wù)邏輯采用的思維方式是不同的

  一個(gè)是面向關(guān)系, 處理好每張表的變化, 以及表之間的關(guān)聯(lián)

  一個(gè)是面向?qū)ο笏季S, 將每一條記錄看做一個(gè)對(duì)象去操作

  在沒(méi)有ORMapping之前, 程序員必須要自己搞定這二者復(fù)雜的關(guān)系轉(zhuǎn)換

  而有了ORMapping框架之后

  程序員的代碼, 大概就會(huì)變成這樣

  video.addComment(new Comment(......));

  這樣就夠了, 面向?qū)ο蟮拇a, 將自動(dòng)轉(zhuǎn)換成對(duì)應(yīng)的SQL語(yǔ)句

  更新所有關(guān)聯(lián)的表格

  下面簡(jiǎn)單介紹一個(gè)nodeJS里面的 ORMapping 框架的使用

  sequelize

  在nodejs中,有不少ORM模塊,他們各有特點(diǎn),這里的話(huà)我們選擇一個(gè)ORM(sequelize)進(jìn)行介紹。

  使用流程

  1. 在mysql中創(chuàng)建要操作的數(shù)據(jù)庫(kù)

  2. 安裝ORM模塊:sequelize 與 mysql2

  yarn add mysql2 sequelize -S

  3. 開(kāi)始寫(xiě)nodejs代碼進(jìn)行操作

  · 目錄結(jié)構(gòu)

圖片36

  · 根目錄下創(chuàng)建 db.js文件,里面進(jìn)行連接數(shù)據(jù)庫(kù)

  const Sequelize = require("sequelize")

  var DB = new Sequelize(

  'w1902-1', // 數(shù)據(jù)庫(kù)名

  'root', // 用戶(hù)名

  '123456A', // 用戶(hù)密碼

  //數(shù)據(jù)庫(kù)配置對(duì)象

  {

  'dialect': 'mysql', // 數(shù)據(jù)庫(kù)使用mysql

  'host': 'localhost', // 數(shù)據(jù)庫(kù)服務(wù)器ip

  'port': 3306, // 數(shù)據(jù)庫(kù)服務(wù)器端口

  'define': {

  // 字段以下劃線(xiàn)(_)來(lái)分割(默認(rèn)是駝峰命名風(fēng)格)

  'underscored': true,

  'charset': 'utf8',

  'collate': 'utf8_general_ci',

  'freezeTableName': true,

  'timestamps': true, //為模型添加 createdAt 和 updatedAt 兩個(gè)時(shí)間戳字段

  },

  'pool': { //連接池

  'maxConnections': 20,

  'minConnections': 0,

  'maxIdleTime': 10000 // 連接最大空置時(shí)間(毫秒),超時(shí)后將釋放連接

  },

  }

  );

  module.exports = DB;

  · 根目錄下創(chuàng)建 model文件夾,表示映射各個(gè)表的模型如model/User.js

  // 要定義模型和表之間的映射,請(qǐng)使用define方法。 隨后Sequelize將自動(dòng)添加createdAt和updatedAt屬性。

  // 因此,您將能夠知道數(shù)據(jù)庫(kù)條目何時(shí)進(jìn)入數(shù)據(jù)庫(kù)以及最后一次更新時(shí)。

  var Sequelize = require('sequelize');

  var DB = require('../DB');

  var User = DB.define(

  'user', //模型名

  {

  userId: {

  field: 'user_id',

  primaryKey: true,

  type: Sequelize.BIGINT,

  allowNull: false

  },

  userName: {

  field: 'user_name',

  type: Sequelize.STRING,

  allowNull: false

  },

  }, {

  // 如果為 true 則表的名稱(chēng)和 model 相同,即 user

  // 為 false MySQL創(chuàng)建的表名稱(chēng)會(huì)是復(fù)數(shù) users

  // 如果指定的表名稱(chēng)本就是復(fù)數(shù)形式則不變

  freezeTableName: false

  }

  );

  // 創(chuàng)建表

  // User.sync() 會(huì)創(chuàng)建表并且返回一個(gè)Promise對(duì)象

  // 如果 force = true 則會(huì)把存在的表(如果users表已存在)先銷(xiāo)毀再創(chuàng)建表

  // 默認(rèn)情況下 forse = false

  User.sync({

  force: false

  });

  // 添加新用戶(hù)

  module.exports = User;

  · 根目錄下創(chuàng)建serve.js文件,在此文件中操作user表

  完整代碼

  var User = require('./model/User');

  //添加(創(chuàng)建)用戶(hù)(直接添加)

  function create() {

  // 添加用戶(hù)(直接添加)

  User.create({

  userId: 38,

  userName: '老王2',

  }).then(function(user) {

  console.log('****************************');

  console.log('添加結(jié)果為:', user._options.isNewRecord);

  }).catch(function(err) {

  console.log("出錯(cuò)了:", err);

  });

  }

  // 添加(創(chuàng)建)用戶(hù) (先查詢(xún)?cè)谔砑?

  function findOrCreate() {

  // 添加用戶(hù):此方法會(huì)先查詢(xún),如果查詢(xún)到有此條數(shù)據(jù)相同的就不會(huì)新增,返回created:false,得到查詢(xún)結(jié)果

  User.findOrCreate({

  where: {

  userId: 38,

  userName: '老王9'

  }

  })

  .spread((test, created) => {

  if (created == false) {

  //說(shuō)明數(shù)據(jù)已存在,添加失敗

  console.log("-------------數(shù)據(jù)已存在,添加失敗--------------");

  var data = test.get({

  plain: true

  });

  console.log("已存在的數(shù)據(jù)為:", data);

  } else {

  console.log("添加成功...");

  }

  }).catch(function(err) {

  console.log("出錯(cuò)了:", err);

  })

  }

  //查詢(xún)單條數(shù)據(jù)(根據(jù)任意字段)

  function find() {

  User.findOne({

  where: {

  userId: 38

  }

  })

  .then(function(user) {

  console.log('****************************');

  console.log("查詢(xún)的數(shù)據(jù)為:", user.dataValues);

  console.log('****************************');

  console.log('user userName: ', user.userName);

  console.log('user userName: ', user.userId);

  });

  }

  //查詢(xún)所有數(shù)據(jù)

  function findAll() {

  //查詢(xún)所有數(shù)據(jù)

  User.findAll()

  .then(data => {

  // 從結(jié)果集中取出所有數(shù)據(jù)

  var users = [];

  data.forEach(function(ele) {

  users.push(ele.dataValues)

  })

  console.log("所有的數(shù)據(jù)為:", users)

  })

  }

  //刪除數(shù)據(jù)

  function destroy() {

  User.destroy({

  where: {

  userId: 38

  }

  })

  .then(function(result) { //表示刪除的數(shù)據(jù)的條數(shù)

  console.log('共刪除數(shù)據(jù)條數(shù)為:', result);

  });

  }

  //修改數(shù)據(jù)

  function update() {

  User.update({

  userName: "張三"

  }, {

  where: {

  userId: 36

  }

  })

  .then(function(result) {

  console.log('共修改數(shù)據(jù)條數(shù)為:', result);

  })

  }

  //調(diào)用相關(guān)方法

  update()

  感受一下, 有了ORMapping框架之后, 操作數(shù)據(jù)庫(kù)有多簡(jiǎn)單

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
大數(shù)據(jù)測(cè)試工程師需要具備哪些技能?

一、理解大數(shù)據(jù)概念大數(shù)據(jù)測(cè)試工程師需要理解大數(shù)據(jù)的基本概念和原理,如分布式存儲(chǔ)、MapReduce、實(shí)時(shí)計(jì)算等。他們還需要了解如何處理大規(guī)模的...詳情>>

2023-10-14 23:43:03
為什么SpringBoot的 jar 可以直接運(yùn)行?

一、JAR文件的結(jié)構(gòu)與執(zhí)行方式Spring Boot的JAR包是Java Archive的縮寫(xiě),它是一種壓縮文件格式,可以將Java項(xiàng)目的類(lèi)文件、資源文件以及依賴(lài)庫(kù)等...詳情>>

2023-10-14 23:01:49
站群服務(wù)器是什么?

站群服務(wù)器的含義與用途站群服務(wù)器主要用于支持站群,即由一組相互鏈接的網(wǎng)站組成的群體。這些網(wǎng)站通常由同一組織或個(gè)人擁有,并且經(jīng)常會(huì)互相鏈...詳情>>

2023-10-14 22:46:12
自編碼器是什么?

一、自編碼器原理自編碼器的設(shè)計(jì)靈感源于神經(jīng)科學(xué)中關(guān)于感知系統(tǒng)的認(rèn)知原理,它的核心思想是將輸入數(shù)據(jù)經(jīng)過(guò)編碼過(guò)程,形成一個(gè)隱藏層的特征表示...詳情>>

2023-10-14 22:41:10
什么是云網(wǎng)融合?

一、云網(wǎng)融合的定義云網(wǎng)融合是指將云計(jì)算與網(wǎng)絡(luò)技術(shù)相結(jié)合,實(shí)現(xiàn)資源的共享、業(yè)務(wù)的協(xié)同,將網(wǎng)絡(luò)與云端服務(wù)深度融合,提供更靈活、高效、安全的...詳情>>

2023-10-14 22:31:47
精品国产亚洲人成在线| 色综合久久天天综合| 国产美女在线一区二区三区| 精品视频一区二区三区免费| 99热精品一区| 日韩av成人| 亚洲女初尝黑人巨高清在线观看| 国产a毛片| 免费一级片在线观看| 日本特黄一级| 亚洲女初尝黑人巨高清在线观看| 精品国产三级a| 香蕉视频久久| 99久久精品国产免费| 成人在激情在线视频| 欧美另类videosbestsex久久 | 国产国产人免费视频成69堂| 黄视频网站免费观看| 精品国产三级a∨在线观看| 黄视频网站免费| 亚洲女人国产香蕉久久精品| 亚洲精品永久一区| 亚洲第一页乱| a级毛片免费全部播放| 国产麻豆精品hdvideoss| 亚洲第一页色| 99久久网站| 韩国毛片免费| 国产一区二区福利久久| 欧美一级视| 成人免费高清视频| 国产一级强片在线观看| 精品在线观看国产| 九九干| 久草免费在线观看| 国产一区二区精品尤物| 精品久久久久久中文| 午夜在线观看视频免费 成人| 麻豆网站在线看| 91麻豆tv| 亚洲天堂免费| 欧美激情一区二区三区视频高清| 久久精品欧美一区二区| 欧美日本二区| 青青青草视频在线观看| 国产a毛片| 久久国产影院| 国产精品1024在线永久免费| 国产91丝袜高跟系列| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产a毛片| 日韩中文字幕一区二区不卡| 久久国产精品只做精品| 四虎久久精品国产| 你懂的国产精品| 国产原创视频在线| 国产成人女人在线视频观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产成人精品综合在线| 精品国产一区二区三区久久久狼| 黄视频网站在线观看| 99热精品在线| 人人干人人插| 精品久久久久久中文字幕2017| 天天做日日爱| 国产精品自拍在线观看| 免费国产在线观看不卡| 国产伦精品一区二区三区无广告 | 成人在免费观看视频国产| 国产韩国精品一区二区三区| 精品国产一区二区三区久| 国产综合91天堂亚洲国产| 精品在线免费播放| 可以在线看黄的网站| 国产亚洲精品成人a在线| 久久国产一区二区| 久草免费资源| 日韩在线观看视频网站| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 你懂的日韩| 四虎久久影院| 精品在线观看一区| 国产亚洲精品aaa大片| 91麻豆精品国产片在线观看| 天天做日日爱| 久久国产精品自由自在| 九九久久国产精品| 国产视频一区二区在线观看| 亚欧成人乱码一区二区| 欧美日本国产| 国产视频一区二区在线播放| 国产成人精品影视| 国产极品精频在线观看| 亚洲天堂在线播放| 成人免费网站视频ww| 国产不卡在线观看视频| 毛片的网站| 韩国毛片基地| 高清一级淫片a级中文字幕| 国产精品1024永久免费视频| 精品国产亚洲一区二区三区| 精品视频免费在线| 久久久久久久网| 精品视频在线看| 午夜欧美成人香蕉剧场| 日韩免费在线| 精品在线观看一区| 久久精品免视看国产明星| 国产极品白嫩美女在线观看看| 91麻豆高清国产在线播放| 免费国产在线视频| 日本在线www| 黄视频网站免费| 国产视频在线免费观看| 欧美1区2区3区| 九九久久国产精品| 日韩女人做爰大片| 日韩专区第一页| 国产一区二区精品久久91| 欧美a免费| 欧美另类videosbestsex高清| 97视频免费在线观看| 亚飞与亚基在线观看| 国产一区二区高清视频| 国产国语对白一级毛片| 欧美激情一区二区三区在线播放| 欧美1区| 国产一区二区精品久久91| 欧美国产日韩一区二区三区| 国产韩国精品一区二区三区| 亚洲天堂免费| 99热精品在线| 久久精品免视看国产明星| 成人高清视频在线观看| 青青青草视频在线观看| 亚洲第一色在线| 精品视频在线观看免费| 午夜家庭影院| 国产亚洲精品成人a在线| 韩国毛片基地| 国产一区精品| 久久国产精品只做精品| 国产一区二区精品| 欧美a级v片不卡在线观看| 国产不卡在线看| 国产视频在线免费观看| 国产精品123| 香蕉视频久久| 999精品视频在线| 国产亚洲免费观看| 国产成人精品一区二区视频| 高清一级淫片a级中文字幕| 国产麻豆精品免费密入口| 午夜激情视频在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 91麻豆爱豆果冻天美星空| 精品国产三级a∨在线观看| 精品久久久久久中文字幕一区| 日韩中文字幕一区| 国产高清视频免费观看| 亚洲精品影院一区二区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩中文字幕一区二区不卡| 亚洲第一页色| 国产亚洲免费观看| 午夜精品国产自在现线拍| 台湾毛片| a级精品九九九大片免费看| 黄色免费三级| 一级女人毛片人一女人| 国产伦久视频免费观看 视频| 九九九网站| 欧美大片毛片aaa免费看| 精品视频在线看 | 欧美激情一区二区三区视频| 一a一级片| 欧美爱色| 国产网站免费观看| 你懂的国产精品| 韩国毛片免费| 一级女人毛片人一女人| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 精品国产一区二区三区久久久狼| 午夜家庭影院| 天天做日日爱夜夜爽| 国产一区二区精品久久91| 国产不卡在线看| 国产极品精频在线观看| 欧美另类videosbestsex高清| 国产成人女人在线视频观看| 久草免费在线观看| 国产精品免费精品自在线观看| 精品视频在线观看视频免费视频| 免费的黄视频| 国产韩国精品一区二区三区| 久久国产精品只做精品| 国产美女在线一区二区三区| 国产韩国精品一区二区三区| 成人免费观看视频| 亚飞与亚基在线观看|