麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 什么是ORMapping?

什么是ORMapping?

來源:千鋒教育
發布人:qyf
時間: 2022-10-10 16:59:14 1665392354

  ORM :對象關系映射(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),用于實現面向對象編程語言里不同類型系統的數據之間的轉換。

  O(面向對象) <-----> ORMapping <-----> R(面向關系)

  在數據庫層面, 尤其是關系型數據庫. 是沒有對象概念的.

  有的只是表格, 和數據記錄

圖片34

  想象一下, 如果你在某個視頻網站, 為某個視頻寫了一條評論

  接下來會發生什么呢?

  我們要更改用戶表的記錄, 增加評論數

  用SQL語句進行操作

  update t_user set .......

  可是我們平時都是面向對象編程的

  從邏輯上講

  我們的代碼應該是這樣寫的

  video.cmmt_cnt++;

  這樣就夠了嗎? 當然不夠

  我們還需要增加評論表

圖片35

  還不止這些

  如果這條評論被置頂了呢

  如果這條評論對其他人不可見呢?

  如果這條評論@了其他人呢

  如果這條評論被人點贊了呢

  只要稍微增加一點功能, 邏輯都會變得復雜很多

  一個看似簡單的添加評論, 其實背后并不簡單

  顯然操作數據庫, 跟實現業務邏輯采用的思維方式是不同的

  一個是面向關系, 處理好每張表的變化, 以及表之間的關聯

  一個是面向對象思維, 將每一條記錄看做一個對象去操作

  在沒有ORMapping之前, 程序員必須要自己搞定這二者復雜的關系轉換

  而有了ORMapping框架之后

  程序員的代碼, 大概就會變成這樣

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

  這樣就夠了, 面向對象的代碼, 將自動轉換成對應的SQL語句

  更新所有關聯的表格

  下面簡單介紹一個nodeJS里面的 ORMapping 框架的使用

  sequelize

  在nodejs中,有不少ORM模塊,他們各有特點,這里的話我們選擇一個ORM(sequelize)進行介紹。

  使用流程

  1. 在mysql中創建要操作的數據庫

  2. 安裝ORM模塊:sequelize 與 mysql2

  yarn add mysql2 sequelize -S

  3. 開始寫nodejs代碼進行操作

  · 目錄結構

圖片36

  · 根目錄下創建 db.js文件,里面進行連接數據庫

  const Sequelize = require("sequelize")

  var DB = new Sequelize(

  'w1902-1', // 數據庫名

  'root', // 用戶名

  '123456A', // 用戶密碼

  //數據庫配置對象

  {

  'dialect': 'mysql', // 數據庫使用mysql

  'host': 'localhost', // 數據庫服務器ip

  'port': 3306, // 數據庫服務器端口

  'define': {

  // 字段以下劃線(_)來分割(默認是駝峰命名風格)

  'underscored': true,

  'charset': 'utf8',

  'collate': 'utf8_general_ci',

  'freezeTableName': true,

  'timestamps': true, //為模型添加 createdAt 和 updatedAt 兩個時間戳字段

  },

  'pool': { //連接池

  'maxConnections': 20,

  'minConnections': 0,

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

  },

  }

  );

  module.exports = DB;

  · 根目錄下創建 model文件夾,表示映射各個表的模型如model/User.js

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

  // 因此,您將能夠知道數據庫條目何時進入數據庫以及最后一次更新時。

  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 則表的名稱和 model 相同,即 user

  // 為 false MySQL創建的表名稱會是復數 users

  // 如果指定的表名稱本就是復數形式則不變

  freezeTableName: false

  }

  );

  // 創建表

  // User.sync() 會創建表并且返回一個Promise對象

  // 如果 force = true 則會把存在的表(如果users表已存在)先銷毀再創建表

  // 默認情況下 forse = false

  User.sync({

  force: false

  });

  // 添加新用戶

  module.exports = User;

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

  完整代碼

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

  //添加(創建)用戶(直接添加)

  function create() {

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

  User.create({

  userId: 38,

  userName: '老王2',

  }).then(function(user) {

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

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

  }).catch(function(err) {

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

  });

  }

  // 添加(創建)用戶 (先查詢在添加)

  function findOrCreate() {

  // 添加用戶:此方法會先查詢,如果查詢到有此條數據相同的就不會新增,返回created:false,得到查詢結果

  User.findOrCreate({

  where: {

  userId: 38,

  userName: '老王9'

  }

  })

  .spread((test, created) => {

  if (created == false) {

  //說明數據已存在,添加失敗

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

  var data = test.get({

  plain: true

  });

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

  } else {

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

  }

  }).catch(function(err) {

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

  })

  }

  //查詢單條數據(根據任意字段)

  function find() {

  User.findOne({

  where: {

  userId: 38

  }

  })

  .then(function(user) {

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

  console.log("查詢的數據為:", user.dataValues);

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

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

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

  });

  }

  //查詢所有數據

  function findAll() {

  //查詢所有數據

  User.findAll()

  .then(data => {

  // 從結果集中取出所有數據

  var users = [];

  data.forEach(function(ele) {

  users.push(ele.dataValues)

  })

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

  })

  }

  //刪除數據

  function destroy() {

  User.destroy({

  where: {

  userId: 38

  }

  })

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

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

  });

  }

  //修改數據

  function update() {

  User.update({

  userName: "張三"

  }, {

  where: {

  userId: 36

  }

  })

  .then(function(result) {

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

  })

  }

  //調用相關方法

  update()

  感受一下, 有了ORMapping框架之后, 操作數據庫有多簡單

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 免费观看我爱你电影| 一本到在线观看视频| 里番acg全彩本子| 欧美日韩中文字幕在线| 91久久偷偷做嫩草影院免| 欧美大片在线观看完整版| 波多野结衣1048系列电影| 欧美午夜伦y4480私人影院| 啊灬啊灬啊灬喷出来了| 中文字幕精品亚洲无线码二区| 国产一区二区在线观看app| 精品中文字幕一区在线| 美女扒开裤子让男人桶视频| 男女无遮挡猛进猛出免费观看视频| 韩国三级一区| 污污免费在线观看| 好色成人网| 日韩毛片免费在线观看| 天堂中文字幕在线观看| 深夜福利gif动态图158期| www.插插插| 一区二区三区高清视频在线观看 | 女人张开腿让男人捅爽| 精品精品国产高清a级毛片| 视频免费1区二区三区| 北美伦理电线在2019| 永久毛片| 免费的黄色影片| 在线播放五十路乱中文| 三级一级片| 久久精品日日躁精品| 亚洲一区二区影院| 国产在线精品一区二区中文| 中文字幕专区高清在线观看| 2019国产开嫩苞视频| 久久免费观看国产精品88av| 国产成人一区二区在线不卡| 亚洲乱码一二三四五六区| 日日夜夜摸| 久久99精品久久久久久| 中文字幕在线电影|