vite+ts-4-ORM框架sequelize实现mysql操作

news2025/2/24 6:49:25

random recording 随心记录
What seems to us as bitter trials are often blessings in disguise.
看起来对我们痛苦的试炼,常常是伪装起来的好运。

使用ORM框架sequelize完成Mysql数据库操作

使用ts实现mysql配置/泛型+重载

配置接口实现

创建src/config/DbConfig.ts文件

interface DbConfig{
    host: string, // 可选
    user: string,
    password: string,
    port: number,
    database: string
}
// 环境接口
interface EnvConf{
    dev:DbConfig,
    prod:DbConfig
}

实现环境配置类

  • package.json设置环境变量

dev: set NODE_ENV=dev && nodemon --watch src/ -e ts --exec ts-node ./src/app.ts
prod: set NODE_ENV=prod && nodemon --watch src/ -e ts --exec ts-node ./src/app.ts

完善DbConfig.ts文件

function isString(data: any): data is string {
    return typeof data === 'string'
}
interface DbConfig {
    host: string, // 可选
    user: string,
    password: string,
    port: number,
    database: string
}
// 环境接口
interface EnvConf {
    dev: DbConfig,
    prod: DbConfig
}
class Conf {
    static conf: Conf = new Conf()
    env!: keyof EnvConf
    envConf!: EnvConf
    constructor() {
        console.log(process.env.NODE_ENV)
        this.env = process.env.NODE_ENV === "dev"?"dev":"prod"
        console.log(this.env)
        this.initConf()
    }
    initConf() {
        this.envConf = {
            dev: {
                host: "192.168.136.129", 
                user: "admin",
                password: "root",
                port: 3306,
                database: "test"
            },
            prod: {
                host: "www.test.com", 
                user: "admin",
                password: "root",
                port: 3306,
                database: "test"
            }
        }
    }
    getConf():DbConfig
    getConf(key:string):string
    getConf(key:any=''):any{
        if(this.isDbConConfKeys(key)&&key.length>0){
            return this.envConf[this.env][key]
        }else{
            return this.envConf[this.env]
        }
    }
    isDbConConfKeys(key:any):key is keyof DbConfig{
        return key === 'host' || key === 'user' || key === 'password' || key === 'database'
    }
}
export default Conf.conf

app.ts引入测试

import dbconfig from './conf/DbConfig'
console.log(dbconfig.getConf())

在这里插入图片描述

ORM sequelize框架

ORM

ORM避免直接编写sql语句带来的繁琐,把关系型数据表直接映射为js对象查询,同时也将js对象转换为关系型数据表进行增删改

sequelize

基于promise的node.js ORM,支持postgres,mysql,mariadb,sqlite,mssql

  • 支持事务
  • 支持一对一,一对多,多对一,多对多 关联表映射

使用sequelize实现crud

sequelize连接mysql

创建src/dao/BaseDaoDefine.ts文件

import dbConfig from "@/conf/DbConfig";
import { Dialect } from "sequelize";
import { Sequelize } from "sequelize-typescript";
class BaseDaoDefine{
    static baseDaoOrm:BaseDaoDefine = new BaseDaoDefine()
    sequelize!:Sequelize
    constructor(){
        this.initSeqConf('mysql')
    }
    initSeqConf(dialect:Dialect){
        let {host,user,password,database,port} = dbConfig.getConf()
        this.sequelize = new Sequelize(database,user,password,{
            host,
            port,
            dialect, // 方言 数据库类型
            define:{timestamps:false,freezeTableName:true}
        })
    }
}
export const {sequelize} = BaseDaoDefine.baseDaoOrm

执行3种查询

使用sequelize define方法定义一个模型实现

  • 适合对单表进行各种查询
  • 适合单表添加,更新
  • 适合多表级联添加,更新
  • 不适合多表级联查询,有差异

使用sequelize原生操作

  • 适合所有场景

使用模型类来实现

  • 最适合对单表进行各种查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SQL Server + MySQL三】数据库设计【ER模型+UML模型+范式】 + 数据库安全性

极其感动!!!当时学数据库的时候,没白学!! 时隔很长时间回去看数据库的笔记都能看懂,每次都靠这份笔记巩固真的是语雀分享要花钱,要不一定把笔记给贴出来(;༎ຶД༎ຶ) ,除…

SFTP的基本定义、用途以及基本优势有哪些

文件传输协议允许用户通过Internet在远程系统之间传输数据。SFTP 就是这样一种协议,它为用户提供了一种安全的方式来发送和接收文件和文件夹,目前少数虚拟主机提供商会提供这项服务。本文将介绍SFTP的基本定义、用途和数据安全方面的优势。 SFTP(Secure …

[附源码]Python计算机毕业设计Django春晓学堂管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

[附源码]计算机毕业设计springboot海南琼旅旅游网

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于SSM的医院医疗管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【毕业设计】23-基于单片机的自动避障机器人设计(原理图+源代码+仿真+论文+答辩PPT)

【毕业设计】23-基于单片机的自动避障机器人设计(原理图源代码仿真论文答辩PPT) 文章目录【毕业设计】23-基于单片机的自动避障机器人设计(原理图源代码仿真论文答辩PPT)任务书设计说明书摘要设计框架架构设计说明书及设计文件源码…

mysql基础知识篇(一)

1. 什么是内连接、外连接、交叉连接、笛卡尔积呢? 内连接(inner join):取得两张表中满足存在连接匹配关系的记录。 外连接(outer join):不只取得两张表中满足存在连接匹配关系的记录&#xff0…

httplib库的安装以及使用

目录 安装httplib库 认识httplib库 httplib请求类 httplib响应类 httplib中的Server类 httplib的client类 httplib库搭建简单的服务器 httplib库搭建简单的客户端 安装httplib库 1.进入github,搜索httplib库 2.下载库 3.下载完毕将库的压缩包传输到linux系统下 4…

软件测试概念

目录 基础概念 1、软件测试的概念 2、软件测试的目的 3、基本要求 4、测试的工作流程 5、开发模型 1、瀑布模型 2、增量模型 3、快速模型 4、螺旋开发模型 5、迭代开发模型 6、敏捷开发模型 6、测试模型 1、V模型 2、W模型 7、软件测试的分类 1、测试开发的阶…

css设置渐变边框色

如上图所示,需设置渐变边框色,左右边框颜色固定,上边框从左到右开始渐变,下边框从右到左开始渐变。 思考了很久,如果看作是一个div,则需要用到 border-image属性设置渐变色。也可以看作是两个div&#xff0…

PS不能完成命令,因为没有足够内存(RAM)

PS无疑是一款非常好用的图像编辑软件,对于电脑小白来说操作非常困难,比如提示“不能完成命令,因为没有足够内存(RAM)”要怎么办呢?下面就来看看小编为大家提供的解决办法吧。 一、解决没有足够内存RAM的问题…

c++特殊类

目录 1.实现一个只能在堆上创建对象的类(了解思想) 2.实现一个只能在栈上创建对象的类(同样思想最重要) 3.单例模式(有实际应用价值) 1.实现一个只能在堆上创建对象的类(了解思想)…

MOAT: ALTERNATING MOBILE CONVOLUTION AND ATTENTION BRINGS STRONG VISION MODELS

MOAT: ALTERNATING MOBILE CONVOLUTION AND ATTENTION BRINGS STRONG VISION MODELS一、引言二、实现细节(一)、MBConv block(二)、Transformer block(三)、Comparing MBConv and Transformer blocks(四)、MOAT block(五)、Macro-level network design三、实验部分(一)、ImageN…

传奇GOM引擎登录器配置教程

登录器教程大分类目录引导说明 (01): 解压配置器文件包后,打开KEY文件夹然后选择KEY (02): 战盟官方提供5种不同功能KEY,请打开KEY文件夹里面有载图说明功能,选择你需要…

[附源码]Python计算机毕业设计Django打印助手平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

PG::SunsetDecoy

nmap -Pn -p- -T4 --min-rate1000 192.168.133.85 nmap -Pn -p 22,80 -sCV 192.168.133.85 查看80端口的页面,是一个压缩包 下载压缩包后尝试打开,需要密码,所以直接尝试爆破 得到解压密码 manuel 在/etc/shadow中找到了可以利用的地方 …

终于成功把家里的灯光换掉了

这个周末做过最有意义的事情莫过于把家里的客厅和餐厅的两个黄色吊灯都换上白色灯光的了。为什么说最有意义,因为这件事我已经拖了一年多了,这个黄色的灯光我就一直觉得不舒服,想换掉,可是我不会换,也不知道灯要买什么…

内存取证——ABC包

1、获取数据包的镜像信息 2、获取主机名字 3、 列出文件中曾使用的进程信息 题目要求我们去查看管理员的信息 使用命令查找列出有关管理员的信息继续操作(这里发现管理员注册表) 这个文件里存放着管理员的一些基本信息 已发现此的虚拟地址 打开查看 4、获取管理员用户密码

RationalDMIS 2020 轮廓度评价注意事项2021

用偏差算轮廊度值的常用方法 常见的检测设备都使用ISO和美标来评价轮廓,两者有点差异,ISO标准相对美标要更加严格。在评价轮廊度是有只管控形状和管控形状位置两种,用偏差来计算轮廊度的算法不一样。 ASMEY14.5轮廊度计算规律: (1)当最大值和最小值均三0时,轮廓度测定…

报名即将结束!11 大云原生领域开源技术干货一场拿下

距离 12 月 03 日上海站微服务x容器开源开发者 Meetup 活动正式开幕还有不到一周时间,线下席位即将约满。请感兴趣的同学抓紧报名哦! 本次活动由阿里云云原生应用平台与飞天 Club 共同打造,整体内容聚焦容器 & 微服务方向。活动将围绕云…