Deno MySQL ORM

視頻演示

https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=14

一起來完成以下步驟:

  1. 創(chuàng)建數(shù)據(jù)庫連接
  2. 創(chuàng)建Model,也就是實體類
  3. 寫新增褒繁、修改、查詢和刪除
  4. 運行:deno run --allow-net --allow-read --allow-write main.ts
image

#controllers/employeeController.ts

//引入Context
import { Context } from "https://deno.land/x/oak/mod.ts";
//引入倉庫類
import employeeRepo from "../repositories/employeeRepo.ts";

//獲取當(dāng)前目錄方法
const { cwd } = Deno;

class Controller {
    static async hello(ctx: any) {
        //cwd獲取當(dāng)前工程目錄 
        //注意 ' !== `
        ctx.render(`${cwd()}/views/index.ejs`, {
            title: "Testing",
            data: { name: "www.deepincoding.com" }
        });
    }

    //保存
    static async save(ctx: Context) {
        const {value} = await ctx.request.body();
        const result = await employeeRepo.save(value);
        ctx.response.body = result;
    }

    //獲取所有
    static async findAll(ctx: Context){
        const result = await employeeRepo.findAll();
        ctx.response.body = result;
    }

    //更新
    static async update(ctx: Context) {
        const {value} = await ctx.request.body();
        const result = await employeeRepo.update(value);
        ctx.response.body = result;

    }

    //根據(jù)ID獲取
    static async findById(ctx: any){
        const id = ctx.params.id;
        const result = await employeeRepo.findById(id);
        ctx.response.body = result;

    }

    //根據(jù)ID刪除
    static async deleteById(ctx: any){
        const id = ctx.params.id;
        const result = await employeeRepo.deleteById(id);
        ctx.response.body = result;

    }

}

export default Controller;

#database/database.ts

import { DataTypes, Database, Model } from 'https://deno.land/x/denodb/mod.ts';

//MySQL連接
const mysqldb = new Database('mysql', {
  host: '127.0.0.1',
  username: 'root',
  password: '123456',
  database: 'deno'
});

//導(dǎo)出
export default mysqldb;

#models/employeeModel.ts

import { DataTypes, Database, Model } from 'https://deno.land/x/denodb/mod.ts';

//員工實體
class EmployeeModel extends Model {
    //表名
    static table = 'employee';
    //字段
    static fields = {
        id: { primaryKey: true, autoIncrement: true },
        name: DataTypes.STRING,
        age: DataTypes.INTEGER
    };

}

export default EmployeeModel;

#repositories/employeeRepo.ts


//引入EmployeeModel實體
import  EmployeeModel  from  "../models/employeeModel.ts";
import mysqldb from "../database/database.ts";

class employeeRepo{

    //初始化數(shù)據(jù)庫
    static async init(){
        mysqldb.link([EmployeeModel]);
        await mysqldb.sync({ drop: false });
    }

    //新增
    static async save (employee: any){
        return EmployeeModel.create(employee);
    }

    //獲取所有
    static async findAll(){
        return EmployeeModel.all();
    }

    //更新
    static async update (employee: any){
        return EmployeeModel.where("id",employee.id).update(employee);
    }

    //根據(jù)ID查詢
    static async findById(id: number){
        return EmployeeModel.where("id",id).get();
    }

    //刪除
    static async deleteById(id: number){
        return EmployeeModel.deleteById(id);
    }

}

export default employeeRepo;

#routers/employeeRouter.ts

//引入Router
import { Router } from "https://deno.land/x/oak/mod.ts";
//引入自定義Controller
import Controller from "../controllers/employeeController.ts";

//創(chuàng)建router
const router = new Router();

router.get("/",Controller.hello);
router.post("/save",Controller.save);
router.get("/findAll",Controller.findAll);
router.put("/update",Controller.update);
router.get("/findById/:id",Controller.findById);
router.delete("/deleteById/:id",Controller.deleteById);

export default router;

#main.ts

//引入所需的依賴模塊
import { Application } from "https://deno.land/x/oak/mod.ts"
import {viewEngine,engineFactory,adapterFactory} from "https://deno.land/x/view_engine/mod.ts";
import router from "./routers/employeeRouter.ts";
import employeeRepo from "./repositories/employeeRepo.ts";

//初始化數(shù)據(jù)庫
await employeeRepo.init();

//創(chuàng)建相關(guān)頁面引擎對象
const ejsEngine = engineFactory.getEjsEngine();
const oakAdapter = adapterFactory.getOakAdapter();

//創(chuàng)建app
const app = new Application();
//應(yīng)用頁面引擎
app.use(viewEngine(oakAdapter,ejsEngine));

//應(yīng)用路由
app.use(router.routes());
app.use(router.allowedMethods());

//log 日志
console.log("Server Port 8000");

//端口
await app.listen({port: 8000 })

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厉斟,一起剝皮案震驚了整個濱河市决采,隨后出現(xiàn)的幾起案子域滥,更是在濱河造成了極大的恐慌,老刑警劉巖序矩,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸯绿,死亡現(xiàn)場離奇詭異,居然都是意外死亡簸淀,警方通過查閱死者的電腦和手機瓶蝴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來租幕,“玉大人舷手,你說我怎么就攤上這事【⑿鳎” “怎么了男窟?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贾富。 經(jīng)常有香客問我歉眷,道長,這世上最難降的妖魔是什么颤枪? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任汗捡,我火速辦了婚禮,結(jié)果婚禮上畏纲,老公的妹妹穿的比我還像新娘扇住。我一直安慰自己春缕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布艘蹋。 她就那樣靜靜地躺著锄贼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪女阀。 梳的紋絲不亂的頭發(fā)上咱娶,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音强品,去河邊找鬼。 笑死屈糊,一個胖子當(dāng)著我的面吹牛的榛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逻锐,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼夫晌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昧诱?” 一聲冷哼從身側(cè)響起晓淀,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盏档,沒想到半個月后凶掰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蜈亩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年懦窘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稚配。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡畅涂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出道川,到底是詐尸還是另有隱情午衰,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布冒萄,位于F島的核電站臊岸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尊流。R本人自食惡果不足惜扇单,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奠旺。 院中可真熱鬧蜘澜,春花似錦施流、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至装诡,卻和暖如春银受,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸦采。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工宾巍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渔伯。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓顶霞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锣吼。 傳聞我的和親對象是個殘疾皇子选浑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348