数据库连接池以及sequelize实现增删改查等操作指南
来源:脚本之家
时间:2023-01-01 07:56:03 221浏览 收藏
本篇文章给大家分享《数据库连接池以及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学习网公众号!
-
456 收藏
-
440 收藏
-
408 收藏
-
335 收藏
-
467 收藏
-
303 收藏
-
176 收藏
-
368 收藏
-
475 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习
-
- 单薄的长颈鹿
- 很棒,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢作者大大分享文章!
- 2023-04-26 22:41:32
-
- 雪白的水蜜桃
- 这篇文章真是及时雨啊,细节满满,很好,mark,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-02-16 15:13:20
-
- 虚幻的小伙
- 太细致了,mark,感谢老哥的这篇技术贴,我会继续支持!
- 2023-01-31 11:40:27
-
- 激情的眼神
- 这篇技术贴太及时了,好细啊,写的不错,码住,关注师傅了!希望师傅能多写数据库相关的文章。
- 2023-01-26 10:22:04
-
- 兴奋的糖豆
- 这篇技术贴出现的刚刚好,好细啊,很有用,已收藏,关注楼主了!希望楼主能多写数据库相关的文章。
- 2023-01-05 16:21:59
-
- 光亮的老鼠
- 感谢大佬分享,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢博主分享文章!
- 2023-01-05 09:05:37
-
- 知性的雪糕
- 很好,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢博主分享博文!
- 2023-01-01 13:36:32
-
- 风中的舞蹈
- 这篇博文出现的刚刚好,细节满满,受益颇多,已收藏,关注大佬了!希望大佬能多写数据库相关的文章。
- 2023-01-01 09:03:28