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

目录
  • 数据库连接池
    • 介绍数据库连接池
      • 优点
      • 使用方法
  • 数据库访问中的ORM——sequelize模块
    • ORM
    • sequelize模块——ORM的实现模块
  • 总结

数据库连接池

介绍数据库连接池

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

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

优点

(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实现增删改查等操作指南的文章就介绍到这了,更多相关数据库连接池及sequelize增删改查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql数据库连接池配置教程

    第一步:写javabean 复制代码 代码如下: package withouttears.jdbc.db; import java.util.HashMap; import java.sql.*; //JNDI有两个核心接口Context和DirContext, //Context中包含了基本的名字操作,而DirContext则将这些操作扩展到目录服务. import javax.naming.Context; import javax.naming.InitialContext; //数据库

  • 关于数据库连接池Druid使用说明

    根据综合性能,可靠性,稳定性,扩展性,易用性等因素替换成最优的数据库连接池. Druid:druid-1.0.29 数据库 Mysql.5.6.17 替换目标:替换掉C3P0,用druid来替换 替换原因: 1.性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 .hikariCP的高性能得益于最大限度的避免锁竞争. 2.druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性. 3.综合性能,扩展性等方面,可考虑使用druid或

  • Nodejs + sequelize 实现增删改查操作

    1. 下载资源库 npm install sequelize --save npm install mysql2 --save // npm install mysql 提示不完整 2. 创建数据库配置文件 db.js,配置数据库 var Sequelize = require('sequelize'); module.exports = new Sequelize('blog', 'root', '123456', { host: 'localhost', // 数据库地址 dialect:

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

    目录 数据库连接池 介绍数据库连接池 优点 使用方法 数据库访问中的ORM——sequelize模块 ORM sequelize模块——ORM的实现模块 总结 数据库连接池 介绍数据库连接池 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏. 通俗的理解就是: 数据库连接池是程序启动时建立足够数量的数据库连接对象,并将这些连接对象组成一个池,由程序

  • pymysql实现增删改查的操作指南(python)

    1.安装pymysql:pip install pymysql (在命令行窗口中执行) 2.卸载pymysql:pip uninstall pymysql (在命令行窗口中执行) 数据库的连接 需要注意的是port是不用引号括起来 charset是utf8不是utf-8 # 获取数据库连接对象 connection = pymysql.connect(host='localhost', port=3306, user='root', passwd='2732195202', db='book',

  • java 数据库连接与增删改查操作实例详解

    本文实例讲述了java 数据库连接与增删改查操作.分享给大家供大家参考,具体如下: 1.设置数据库的基本配置信息 package mysql; //数据库配置资源连接 public final class DbConfig { //数据库资源 指定所使用的数据库类型 地址 端口 数据库名称 编码格式 public final static String dbUrl = "jdbc:mysql://localhost:3306/database_name?useUnicode=true&c

  • 详解Java数据库连接JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创

  • 详解通过JDBC进行简单的增删改查(以MySQL为例)

    前言:什么是JDBC Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法.JDBC也是Sun Microsystems的商标.它JDBC是面向关系型数据库的. 简单地说,就是用于执行SQL语句的一类Java API,通过JDBC使得我们可以直接使用Java编程来对关系数据库进行操作.通过封装,可以使开发人员使用纯Java API完成SQL的执行. 一.

  • Hibernate中实现增删改查的步骤详解

    1.首先我们要知道什么是Hibernate Hibernate是一个轻量级的ORMapping对象.主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获取的方法, 可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间,解放编程人员95%的任务. 2.什么是ORM  Object-Relational-Mapping对象关系映射 ORM:是通过java对象映射到数据库表,通过操作Java对象可以完成对数据表的操作.(假如你用的是Dbutils那么还需要在Java类中写sq

  • jdbc实现连接和增删改查功能

    JDBC的定义 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序. jdbc的基本连接 简单的说就是加载驱动,建立连接,然后进行查询和删除等语句的操作,在java中提供了java.sql的jar包,不过我现在用的是mysql的连接和实例,在这里基本

  • node.js中 mysql 增删改查操作及async,await处理实例分析

    本文实例讲述了node.js中 mysql 增删改查操作及async,await处理.分享给大家供大家参考,具体如下: 要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = require('mysql'); //创建数据库连接 let conn = mysql.createConnection({ //主机地址 host: '127.0.0.1', //用户

  • SpringBoot+MySQL+Jpa实现对数据库的增删改查和分页详解

    一. 使用Springboot+Jpa实现对mysql数据库的增删改查和分页功能 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 使用Springboot和jpa对数据库进行操作时,能够大大减少我们的工作量,在jpa中,已经在底层封装好了增删查的功能和sql语句,可以使我们进行快速开发 二.项目过程和配置文件 1.applaction.properties文件配置

随机推荐