摘要:入門(mén)在使用來(lái)關(guān)系型操作數(shù)據(jù)庫(kù)時(shí),為了方便,通常都會(huì)選擇一個(gè)合適的框架。類(lèi)似這樣加,會(huì)先刪掉表后再建表。通過(guò)模型的類(lèi)方法可以獲取模型對(duì)象比如等。增加小明技術(shù)部修改小白白更新成功刪除刪除成功查詢(xún)
sequelize入門(mén)
在使用NodeJS來(lái)關(guān)系型操作數(shù)據(jù)庫(kù)時(shí),為了方便,通常都會(huì)選擇一個(gè)合適的ORM(Object Relationship Model)框架。畢竟直接操作SQL比較繁瑣,通過(guò)ORM框架,我們可以使用面向?qū)ο蟮姆绞絹?lái)操作表。
安裝$ npm install --save co $ npm install --save sequelize $ npm install --save mysql代碼模板
var Sequelize = require("sequelize"); var co = require("co"); co(function* () { // code here }).catch(function(e) { console.log(e); });建立數(shù)據(jù)庫(kù)連接
var sequelize = new Sequelize( "db_entry", // 數(shù)據(jù)庫(kù)名 "root", // 用戶(hù)名 "", // 用戶(hù)密碼 { "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 } } );建立表ORM
# 用戶(hù)信息表 create TABLE xxts_users( id INT(11) NOT NULL AUTO_INCREMENT, username varchar(30) NOT NULL, password VARCHAR(30) NOT NULL, sex INT(2) NOT NULL DEFAULT 1, age VARCHAR(10) NULL, photo VARCHAR(30) NULL, realname VARCHAR(30) NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY (id) );
var User = sequelize.define( // 這個(gè)值還會(huì)作為訪(fǎng)問(wèn)模型相關(guān)的模型時(shí)的屬性名,所以建議用小寫(xiě)形式 "xxts_users", // 字段定義(主鍵、created_at、updated_at默認(rèn)包含,不用特殊定義) { "username": { "type": Sequelize.STRING(30), "allowNull": false }, "password": { "type": Sequelize.STRING(30), "allowNull": false }, "sex": { "type": Sequelize.INTEGER(2), "allowNull": false }, "age": { "type": Sequelize.STRING(10), "allowNull": true }, "photo": { "type": Sequelize.STRING(30), "allowNull": true }, "realname": { "type": Sequelize.STRING(30), "allowNull": true } }, { // 自定義表名 "freezeTableName": true, "tableName": "xxts_users", // 是否需要增加createdAt、updatedAt、deletedAt字段 "timestamps": true, // 不需要createdAt字段 // "createdAt": false, // 將updatedAt字段改個(gè)名 //"updatedAt": "utime" // 將deletedAt字段改名 // 同時(shí)需要設(shè)置paranoid為true(此種模式下,刪除數(shù)據(jù)時(shí)不會(huì)進(jìn)行物理刪除,而是設(shè)置deletedAt為當(dāng)前時(shí)間 // "deletedAt": "dtime", // "paranoid": true } );
說(shuō)明:
建表SQL會(huì)自動(dòng)執(zhí)行的意思是你主動(dòng)調(diào)用sync的時(shí)候。類(lèi)似這樣:User.sync({force: true});(加force:true,會(huì)先刪掉表后再建表)。我們也可以先定義好表結(jié)構(gòu),再來(lái)定義Sequelize模型,這時(shí)可以不用sync。兩者在定義階段沒(méi)有什么關(guān)系,直到我們真正開(kāi)始操作模型時(shí),才會(huì)觸及到表的操作,但是我們當(dāng)然還是要盡量保證模型和表的同步(可以借助一些migration工具)。
增刪改查通過(guò)Sequelize獲取的模型對(duì)象都是一個(gè)DAO(Data Access Object)對(duì)象,這些對(duì)象會(huì)擁有許多操作數(shù)據(jù)庫(kù)表的實(shí)例對(duì)象方法(比如:save、update、destroy等),需要獲取“干凈”的JSON對(duì)象可以調(diào)用get({"plain": true})。
通過(guò)模型的類(lèi)方法可以獲取模型對(duì)象(比如:findById、findAll等)。
// 增加 function user_add() { co(function*() { var user = yield User.create({ username: "小明", password: "技術(shù)部", sex: 2, age: 32, photo: "photo.jpg", realname: "admin" }); console.log(user.get({ plain: true })); }).catch(function(e) { console.log(e); }); } // 修改 function user_update(){ co(function*() { var user = yield User.update({ username: "小白白" },{ where:{ id:1 } }); console.log("更新成功"); }).catch(function(e) { console.log(e); }); } // 刪除 function user_destroy(){ co(function*() { var user = yield User.destroy({ where:{ id:1 } }); console.log("刪除成功"); }).catch(function(e) { console.log(e); }); } // 查詢(xún) function user_query(){ co(function*() { var user = yield User.findAll().spread(function(item, created){ console.log(item.get({ plain: true })); }); }).catch(function(e) { console.log(e); }); } user_query();
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/93141.html
摘要:簡(jiǎn)介小伙伴們,如果覺(jué)得本文還不錯(cuò),記得點(diǎn)個(gè)贊或者給個(gè),你們的贊和是我編寫(xiě)更多更豐富開(kāi)源項(xiàng)目的動(dòng)力地址技術(shù)棧全家桶前后端分離開(kāi)發(fā)模式,前端項(xiàng)目與后端項(xiàng)目屬于不同的工程前端工程后端工程注此項(xiàng)目純屬個(gè)人瞎搞,與無(wú)任何關(guān)系。 簡(jiǎn)介 Hello 小伙伴們,如果覺(jué)得本文還不錯(cuò),記得點(diǎn)個(gè)贊或者給個(gè) star,你們的贊和 star 是我編寫(xiě)更多更豐富開(kāi)源項(xiàng)目的動(dòng)力!GitHub 地址 技術(shù)棧 rea...
摘要:簡(jiǎn)介小伙伴們,如果覺(jué)得本文還不錯(cuò),記得點(diǎn)個(gè)贊或者給個(gè),你們的贊和是我編寫(xiě)更多更豐富開(kāi)源項(xiàng)目的動(dòng)力地址技術(shù)棧全家桶前后端分離開(kāi)發(fā)模式,前端項(xiàng)目與后端項(xiàng)目屬于不同的工程前端工程后端工程注此項(xiàng)目純屬個(gè)人瞎搞,與無(wú)任何關(guān)系。 簡(jiǎn)介 Hello 小伙伴們,如果覺(jué)得本文還不錯(cuò),記得點(diǎn)個(gè)贊或者給個(gè) star,你們的贊和 star 是我編寫(xiě)更多更豐富開(kāi)源項(xiàng)目的動(dòng)力!GitHub 地址 技術(shù)棧 rea...
摘要:簡(jiǎn)介小伙伴們,如果覺(jué)得本文還不錯(cuò),記得點(diǎn)個(gè)贊或者給個(gè),你們的贊和是我編寫(xiě)更多更豐富開(kāi)源項(xiàng)目的動(dòng)力地址技術(shù)棧全家桶前后端分離開(kāi)發(fā)模式,前端項(xiàng)目與后端項(xiàng)目屬于不同的工程前端工程后端工程注此項(xiàng)目純屬個(gè)人瞎搞,與無(wú)任何關(guān)系。 簡(jiǎn)介 Hello 小伙伴們,如果覺(jué)得本文還不錯(cuò),記得點(diǎn)個(gè)贊或者給個(gè) star,你們的贊和 star 是我編寫(xiě)更多更豐富開(kāi)源項(xiàng)目的動(dòng)力!GitHub 地址 技術(shù)棧 rea...
摘要:本項(xiàng)目中采用了進(jìn)行狀態(tài)管理,的主要作用是允許狀態(tài)在不同分支的組件中進(jìn)行傳遞,從而避免了使用原始方法如導(dǎo)致的不同分支組件之間數(shù)據(jù)無(wú)法傳遞子組件無(wú)法修改父組件狀態(tài)等問(wèn)題。 項(xiàng)目功能 最近在做一個(gè)舊書(shū)交易網(wǎng)站,本屬于B/S體系結(jié)構(gòu)的課程作業(yè),但由于采用了新的框架所以躍躍欲試想都記錄下來(lái)。 實(shí)現(xiàn)一個(gè)舊書(shū)交易網(wǎng)站,基本功能如下: 實(shí)現(xiàn)用戶(hù)注冊(cè)、登錄功能,用戶(hù)注冊(cè)時(shí)需要填寫(xiě)必要的信息并驗(yàn)證,如...
閱讀 1345·2021-11-25 09:43
閱讀 2101·2021-11-11 10:58
閱讀 1403·2021-11-08 13:18
閱讀 2917·2019-08-29 16:25
閱讀 3656·2019-08-29 12:51
閱讀 3429·2019-08-29 12:30
閱讀 836·2019-08-26 13:24
閱讀 3785·2019-08-26 10:38