Deno MySQL ORM

视频演示

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

一起来完成以下步骤:

  1. 创建数据库连接
  2. 创建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";

//获取当前目录方法
const { cwd } = Deno;

class Controller {
    static async hello(ctx: any) {
        //cwd获取当前工程目录 
        //注意 ' !== `
        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;

    }

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

    }

    //根据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'
});

//导出
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{

    //初始化数据库
    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);
    }

    //根据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";

//创建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";

//初始化数据库
await employeeRepo.init();

//创建相关页面引擎对象
const ejsEngine = engineFactory.getEjsEngine();
const oakAdapter = adapterFactory.getOakAdapter();

//创建app
const app = new Application();
//应用页面引擎
app.use(viewEngine(oakAdapter,ejsEngine));

//应用路由
app.use(router.routes());
app.use(router.allowedMethods());

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,156评论 6 529
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,866评论 3 413
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 174,880评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,398评论 1 308
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,202评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,743评论 1 320
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,822评论 3 438
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,962评论 0 285
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,476评论 1 331
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,444评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,579评论 1 365
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,129评论 5 355
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,840评论 3 344
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,231评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,487评论 1 281
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,177评论 3 388
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,568评论 2 370