zoukankan      html  css  js  c++  java
  • Deno MySQL 增删查改 (包含页面)

    视频演示:https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=10

    一起来完成以下步骤:

    1. 使用之前工程代码(09.MySQL增删查改API)),如果你还没有看过09视频,建议看一下
    2. 添加CRUD页面,使用ejs 页面模板
    3. 修改Controller相应的CRUD代码(Service到Repository层无需修改代码)
    4. 测试

    #controllers/employeeController.ts

    //后台redirect
    import { Context, REDIRECT_BACK } from "https://deno.land/x/oak/mod.ts";
    import { Employee } from "../models/employee.ts";
    import employeeService from "../services/employeeService.ts";
    //解析Form
    import { multiParser } from 'https://raw.githubusercontent.com/deligenius/multiparser/master/mod.ts'
    
    const { cwd } = Deno;
    
    class Controller {
        static async list(ctx: any) {
            //cwd获取当前工程目录 
            //注意 ' !== `
            //获取所有员工
            const employees = await employeeService.findAll();
            ctx.render(`${cwd()}/views/list.ejs`, {
                data: { employees }
            });
        }
    
        //新增
        static async new(ctx: any) {
            let employee = {} as Employee;
            ctx.render(`${cwd()}/views/form.ejs`, {
                data: employee
            });
    
        }
    
        //保存
        static async save(ctx: Context) {
            const strEmployee = JSON.stringify(await multiParser(ctx.request.serverRequest));
            const saveEmployee: Employee = JSON.parse(strEmployee);
            //如果ID是空,将保存。否则修改
            if (!saveEmployee.id) {
                const result = await employeeService.save(saveEmployee);
            } else {
                const result = await employeeService.update(saveEmployee);
            }
    
            //保存成功后调转到list页面
            ctx.response.redirect(REDIRECT_BACK, "/");
    
        }
    
        //修改页面
        static async edit(ctx: any) {
            const id = ctx.params.id;
            //根据ID获取员工
            const employees = await employeeService.findById(id);
            const updateEmployee = employees[0];
            ctx.render(`${cwd()}/views/form.ejs`, {
                data: updateEmployee
            });
    
        }
    
        //删除
        static async delete(ctx: any) {
            const id = ctx.params.id;
            //根据ID获取员工
            const result = await employeeService.deleteById(id);
            //删除成功后调转到list页面
            ctx.response.redirect(REDIRECT_BACK, "/");
        }
    
    }
    
    export default Controller;
    
    

    #database/database.ts

    
    import { Client } from "https://deno.land/x/mysql/mod.ts"
    
    const client = await new Client().connect({
            hostname: "127.0.0.1",
            username: "root",
            db: "deno",
            poolSize: 3,
            password: "123456"
    });
    
    export default client;
    
    

    #models/employee.ts

    export interface Employee{
        id: number,
        name: string,
        age: number
    }
    
    

    #routers/employeeRouter.ts

    import { Router } from "https://deno.land/x/oak/mod.ts";
    import Controller from "../controllers/employeeController.ts";
    
    const router = new Router();
    
    router.get("/",Controller.list);
    //新增页面
    router.get("/form",Controller.new);
    //修改页面
    router.get("/form/:id",Controller.edit);
    //保存
    router.post("/save",Controller.save);
    //删除
    router.get("/delete/:id",Controller.delete);
    
    export default router;
    

    #services/employeeService.ts

    import { Employee } from  "../models/employee.ts";
    import emlpoyeeRepo from "../repositories/employeeRepo.ts";
    
    class employeeService{
        static async save(employee: Employee){
            return emlpoyeeRepo.save(employee);
        }
    
        static async update(employee: Employee){
            return  emlpoyeeRepo.update(employee);  
        }
        static async findById(id: number){
            return  emlpoyeeRepo.findById(id);
        }
        static async findAll(){
            return  emlpoyeeRepo.findAll();
        }
    
        static async deleteById(id: number){
            return  emlpoyeeRepo.deleteById(id);
        }
    
        
    }
    
    export default employeeService;
    
    
    

    #repositories/employeeRepo.ts

    import client from "../database/database.ts";
    import { Employee } from "../models/employee.ts";
    
    class employeeRepo {
    
        //新增
        static async save(employee: Employee) {
            let result = await client.execute(
                `insert into employee(name,age) values(?,?)`,
                [employee.name, employee.age]);
            employee.id = Number(result.lastInsertId);
    
            console.log(result);
            return employee;
        }
    
        //更新
        static async update(employee: Employee) {
            let result = await client.execute(`update employee set name = ?,age= ? where id = ?`,
                [employee.name, employee.age, employee.id]);
            console.log(result);
            return employee;
        }
    
        //根据ID获取
        static async findById(id: number) {
            const employee = await client.query(
                "select * from employee where id = ?",
                [id]
            );
            console.log(employee);
            return employee;
        }
        //获取所有
        static async findAll() {
            const employees = await client.query(
                "select * from employee"
            );
            console.log(employees);
            return employees;
        }
    
        //根据ID删除
        static async deleteById(id: number) {
            let result = await client.execute(`delete from employee where id = ?`, [id]);
            console.log(result);
            return true;
        }
    
    }
    
    export default employeeRepo;
    
    

    #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";
    
    const ejsEngine = engineFactory.getEjsEngine();
    const oakAdapter = adapterFactory.getOakAdapter();
    
    const app = new Application();
    app.use(viewEngine(oakAdapter,ejsEngine));
    app.use(router.routes());
    app.use(router.allowedMethods());
    
    console.log("Server Port 8000");
    
    await app.listen({port: 8000 })
    
    
    

    #views/form.html

       <form action="/save" enctype="multipart/form-data" method="POST">
                <!--ID在修改的时候用到-->
                <input type="hidden" name="id" value="<%= data.id %>" required>
    
                <div class="modal-header">
                  <h4 class="modal-title">Add/Edit Employee</h4>
    
                </div>
                <div class="modal-body">
                  <div class="form-group">
                    <label>Name</label>
                    <input type="text" class="form-control" name="name" value="<%= data.name %>" required>
                  </div>
    
                  <div class="form-group">
                    <label>Age</label>
                    <input type="text" class="form-control" name="age" value="<%= data.age %>" required>
                  </div>
    
                  <div class="form-group">
                    <label>Address</label>
                    <textarea class="form-control" required></textarea>
                  </div>
    
                </div>
                <div class="modal-footer">
                  <a href="/" class="btn btn-default"> <span>Cancel</span></a>
                  <input type="submit" class="btn btn-success" value="Save">
                </div>
              </form>
    
    
    <div class="container">
        <div class="table-wrapper">
          <div class="table-title">
            <div class="row">
              <div class="col-sm-6">
                <h2>Manage <b>Employees</b></h2>
              </div>
              <div class="col-sm-6">
                <a href="/form" class="btn btn-success" ><i
                    class="material-icons">&#xE147;</i> <span>Add New Employee</span></a>
              </div>
            </div>
          </div>
          <table class="table table-striped table-hover">
            <thead>
              <tr>
                <th>#</th>
                <th>Name</th>
                <th>Age</th>
                <th>Email</th>
                <th>Address</th>
                <th>Phone</th>
                <th>Actions</th>
              </tr>
            </thead>
            <tbody>
    
              <% data.employees.forEach(function(employee){ %>
              <tr>
                <td><%= employee.id%></td>
                <td><%= employee.name%></td>
                <td><%= employee.age%></td>
                <td>thomashardy@mail.com</td>
                <td>89 Chiaroscuro Rd, Portland, USA</td>
                <td>(171) 555-2222</td>
                <td>
                  <a href="/form/<%= employee.id%>"><i class="material-icons"
                      title="Edit">&#xE254;</i></a>
                  <a href='/delete/<%= employee.id%>' class="delete" data-toggle="modal"><i class="material-icons"
                      data-toggle="tooltip" title="Delete">&#xE872;</i></a>
                </td>
              </tr>
              <% }); %>
              
            </tbody>
          </table>
    
        </div>
      </div>
    
    

     

  • 相关阅读:
    JAVA 设计模式 备忘录模式
    JAVA 设计模式 职责链模式
    JAVA 设计模式 中介者模式
    JAVA 设计模式 解释器模式
    JAVA 设计模式 观察者模式
    Linux下/usr/bin/python被删除的后果
    selenium 页面超时后捕获异常也无法继续get(url)使用的问题解决方案
    linux批量更改权限
    linux卸载软件
    安装pymysqlpool并使用(待补充)
  • 原文地址:https://www.cnblogs.com/JavaWeiBianCheng/p/13150335.html
Copyright © 2011-2022 走看看