当前位置:首页 > 文章列表 > 数据库 > MySQL > 数据库连接池以及sequelize实现增删改查等操作指南

数据库连接池以及sequelize实现增删改查等操作指南

来源:脚本之家 2023-01-01 07:56:03 0浏览 收藏

本篇文章给大家分享《数据库连接池以及sequelize实现增删改查等操作指南》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

数据库连接池

介绍数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。

通俗的理解就是: 数据库连接池是程序启动时建立足够数量的数据库连接对象,并将这些连接对象组成一个池,由程序动态的对池中的连接对象进行申请、使用和释放。

优点

(1)避免应用程序频繁的连接、断开数据库

(2)提供数据库连接对象的使用频率。

使用方法

(1)创建数据库连接池:

mysql.createPool(config) 
    host:数据库服务器的地址
    port: 端口号
    user:连接数据库的用户名
    password:连接数据库的密码
    database:数据库名
    connectionLimit:用于指定连接池中最大的链接数,默认属性值为10.
    multipleStatements :是否允许执行多条sql语句,默认值为false

(2)从连接池中获取一个连接

连接池名.getConnection(function(err,connection){
    执行的代码
})
 
//参数err:错误对象。连接失败后的错误信息
//参数connection:连接对象。若连接失败,它就是undefined

(3)释放连接对象(将连接对象放回连接池): connection.release();

(4)从连接池中移除连接对象: connection.destory();

(5)关闭该连接池:  连接池名.end();

数据库访问中的ORM——sequelize模块

ORM

对象关系映射,主要解决面向对象编程与关系型数据库之间不匹配的问题。

ORM的特点

  • 可以提高开发的效率
  • 不用直接写SQL语句

sequelize模块——ORM的实现模块

基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect)。它当前支持MySQL、MariaDB、SQLite、PostgreSQL、Sql Server 数据库。

sequelize的特色

  • 强大的模型定义,支持虚拟类型。
  • 支持完善的数据验证,减轻前后端的验证压力。
  • Sequelize的查询非常全面和灵活。

sequelize的使用

数据库内容:数据库名称为spj,数据库表为 users表;

1、安装sequelize:npm install sequelize    --->必须先安装mysql的驱动模块(npm  install  mysql);

2、连接数据库:创建sequelize的对象;

//导入mysql模块
const mysql = require('mysql2');
//导入sequelize模块
const Sequelize = require('sequelize');
//创建sequelize对象,参数分别为:数据库名称,数据库类型,密码,配置
var MySequelize = new Sequelize('spj','root','929TJ813',{
    host:'localhost',
    port:3306,
    dialect:'mysql',   //数据库类型
    pool:{  //数据库连接池
        max:20,  //最大连接对象的个数
        min:5,  //最小连接对象的个数
        idle:1000  //最长等待时间,单位为毫秒
    }
})
module.exports = MySequelize ;   //导出创建的sequelize对象

3、创建数据模型:数据模型是一个类,对应的是数据库中一张表;

const Sequelize =require('sequelize')
const MySequesize = require('../config/dbconfig');  //导入创建的sequelize对象
//创建StudentModel模型,该模型对应的表名是student
var StudentModel = MySequesize.define('users',{
    sid:{
        type:Sequelize.INTEGER,  //表示属性的数据类型
        field:'s_id',   //属性对应的列名,若不定义field则表中的列名(sid)就是属性名
        primaryKey:true,  //表示主键
        autoIncrement:true  //表示主键自增
    },
    sname:{
        type:Sequelize.STRING(50),
        field: 's_name',
        allowNull:false,   //表示当前列是否允许为空,false表示该列不能为空
        //unique:true    //表示该列的值必须唯一
    },
    sgender:{
        type:Sequelize.STRING(4),
        field:'s_gender',
        allowNull: false
    },
    sbirthday:{
        type:Sequelize.DATE,
        field:'s_birthday',
        allowNull:false
    },
    saddress:{
        type:Sequelize.STRING(100),
        field:'s_address',
        allowNull:false
    },
    sage:{
        type:Sequelize.INTEGER,
        field:'s_age',
        allowNull:false
    }
},{
    freezeTableName:true, //true表示使用给定的表名,false表示模型名后加s作为表名
    timestamps:false  //true表示给模型加上时间戳属性(createAt、updateAt),false表示不带时间戳属性
})
//同步数据库,force的值为false,表若存在则先删除后创建,force的值为true表示表若存在则不创建
var users = StudentModel.sync({force:false});
 
module.exports = StudentModel;   //导出模型

4、使用sequelize实现增删改查 。

const StudentModel = require('../../db/model/StudentModel');
const Sequelize = require('sequelize')
//插入数据
StudentModel.create({
    sname:'关羽',
    sgender:'男',
    sbirthday:'1998-12-28',
    saddress:'陕西宝鸡'
}).then(result=>{
    console.log("插入成功!",result);
}).catch(err=>{
    console.log("插入失败!",err);
})
 
//查询数据
StudentModel.findAll({
    raw:true   //查询出来只有需要的数据,没有别的内容
}).then(data=>{
    console.log(data);
})
 
//删除记录
StudentModel.destroy({
    where:{
        sid:2
    }
}).then(result=>{
    console.log("删除成功!",result)
}).catch(err=>{
    console.log("删除失败!",err);
})
 
//更新记录
StudentModel.findOne({
    where:{
        sid:3
    }
}).then(users=>{
    users.update({
        sname:'张飞',
        sgender:'男'
    }).then(result=>{
        console.log("更新成功!",result)
    }).catch(err=>{
        console.log("更新失败!",err);
    })
}).catch(error=>{
    console.log("查无此人!",error);
})
 
//查询部分字段
StudentModel.findAll({
    attributes:['sname','saddress'],
    raw:true
}).then(result=>{
    console.log(result);
}).catch(err=>{
    console.log(err);
})
 
//聚合函数
StudentModel.findAll({
    attributes:[[Sequelize.fn('COUNT',Sequelize.col('s_id')),"记录总数"]],  //col里面必须放的是列名
    raw:true
}).then(result=>{
    console.log(result)
})

5、使用sequelize实现模糊查询等内容。

const StudentModel = require('../../db/model/StudentModel');
const Op = require('sequelize').Op;   //引入sequelize模块的Op操作符
 
//模糊查询
StudentModel.findAll({
    where:{
        sname:{
            [Op.like]:'张%'
        }
    },
    raw:true
}).then(result=>{
    console.log(result);
})
 
//between:查询年龄在12到18之间的人的信息
StudentModel.findAll({
    where:{
        sage:{
            [Op.between]:[12,18]
        }
    },
    raw:true
}).then(result=>{
    console.log(result);
})
 
//in:查询地址是'陕西西安‘和'陕西商洛‘的记录
StudentModel.findAll({
    where:{
        saddress:{
            [Op.in]:['陕西西安','陕西商洛']
        }
    },
    order:[
      ['sage','desc']   //查询结果按照sage的降序排列
    ],
    raw:true
}).then(result=>{
    console.log(result);
})
 
//and和or:查询性别为'男‘,并且地址是‘陕西宝鸡'的记录
StudentModel.findAll({
    where:{
        [Op.and]:[   //把and改为or即为或时间
            {
                sgender:{
                    [Op.eq]:'男'
                }
            },
            {
                saddress:{
                    [Op.eq]:'陕西宝鸡'
                }
            }
        ]
    },
    raw:true
}).then(result=>{
    console.log(result);
})
 
//limit和offset:分页查询
StudentModel.findAll({
    limit:3,   //查询的记录数
    offset:1,  //从索引值为几的记录开始查询(查询的起始位置),所有数据的索引值从0开始
    raw:true
}).then(result=>{
    console.log(result);
})

总结

今天关于《数据库连接池以及sequelize实现增删改查等操作指南》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于mysql的内容请关注golang学习网公众号!

版本声明
本文转载于:脚本之家 如有侵犯,请联系study_golang@163.com删除
MySQL内部函数的超详细介绍MySQL内部函数的超详细介绍
上一篇
MySQL内部函数的超详细介绍
MySQL查询性能优化武器之链路追踪
下一篇
MySQL查询性能优化武器之链路追踪
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    511次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    498次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 千音漫语:智能声音创作助手,AI配音、音视频翻译一站搞定!
    千音漫语
    千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
    94次使用
  • MiniWork:智能高效AI工具平台,一站式工作学习效率解决方案
    MiniWork
    MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
    89次使用
  • NoCode (nocode.cn):零代码构建应用、网站、管理系统,降低开发门槛
    NoCode
    NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
    104次使用
  • 达医智影:阿里巴巴达摩院医疗AI影像早筛平台,CT一扫多筛癌症急慢病
    达医智影
    达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
    98次使用
  • 智慧芽Eureka:更懂技术创新的AI Agent平台,助力研发效率飞跃
    智慧芽Eureka
    智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
    95次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码