国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

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

            千鋒教育

            掃一掃進入千鋒手機站

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

            關(guān)注千鋒學習站小程序
            隨時隨地免費學習課程

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

            什么是ORMapping?

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

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

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

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

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

            圖片34

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

              接下來會發(fā)生什么呢?

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

              用SQL語句進行操作

              update t_user set .......

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

              從邏輯上講

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

              video.cmmt_cnt++;

              這樣就夠了嗎? 當然不夠

              我們還需要增加評論表

            圖片35

              還不止這些

              如果這條評論被置頂了呢

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

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

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

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

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

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

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

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

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

              而有了ORMapping框架之后

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

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

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

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

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

              sequelize

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

              使用流程

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

              2. 安裝ORM模塊:sequelize 與 mysql2

              yarn add mysql2 sequelize -S

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

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

            圖片36

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

              const Sequelize = require("sequelize")

              var DB = new Sequelize(

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

              'root', // 用戶名

              '123456A', // 用戶密碼

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

              {

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

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

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

              '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;

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

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

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

              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創(chuàng)建的表名稱會是復數(shù) users

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

              freezeTableName: false

              }

              );

              // 創(chuàng)建表

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

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

              // 默認情況下 forse = false

              User.sync({

              force: false

              });

              // 添加新用戶

              module.exports = User;

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

              完整代碼

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

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

              function create() {

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

              User.create({

              userId: 38,

              userName: '老王2',

              }).then(function(user) {

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

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

              }).catch(function(err) {

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

              });

              }

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

              function findOrCreate() {

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

              User.findOrCreate({

              where: {

              userId: 38,

              userName: '老王9'

              }

              })

              .spread((test, created) => {

              if (created == false) {

              //說明數(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("出錯了:", err);

              })

              }

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

              function find() {

              User.findOne({

              where: {

              userId: 38

              }

              })

              .then(function(user) {

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

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

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

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

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

              });

              }

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

              function findAll() {

              //查詢所有數(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ù)庫有多簡單

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

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

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

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

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

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

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

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

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

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

            2023-10-14 22:31:47