返回顶部
首页 > 资讯 > 数据库 >Nodejs中koa2怎么连接mysql
  • 730
分享到

Nodejs中koa2怎么连接mysql

2023-07-02 18:07:22 730人浏览 薄情痞子
摘要

本文小编为大家详细介绍“nodejs中koa2怎么连接mysql”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs中koa2怎么连接Mysql”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。将查询结果转为

本文小编为大家详细介绍“nodejs中koa2怎么连接mysql”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs中koa2怎么连接Mysql”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

将查询结果转为对象或者数组

在真实开发中,实际上某些查询结果应该放入到一个对象中

JSON_OBJECT:()中是key-value的形式

SELECT products.id as id, products.title as title, products.price as price, products.score as score,JSON_OBJECT('id', brand.id, 'name', brand.name, 'rank', brand.phoneRank, 'WEBsite', brand.website) as brandFROM products LEFT JOIN brand ON products.brand_id = brand.id;

Nodejs中koa2怎么连接mysql

在多对多关系中,我们希望查询到的是一个数组:

  • 比如一个学生的多门课程信息,应该是放到一个数组中的;

  • 数组中存放的是课程信息的一个个对象;

  • 这个时候我们要JSON_ARRAYAGGJSON_OBJECT结合来使用;

Nodejs中koa2怎么连接mysql

SELECT stu.id, stu.name, stu.age,JSON_ARRAYAGG(JSON_OBJECT('id', cs.id, 'name', cs.name)) as coursesFROM students stuLEFT JOIN students_select_courses ssc ON stu.id = ssc.student_idLEFT JOIN courses cs ON ssc.course_id = cs.idGROUP BY stu.id;

mysql2的使用

安装mysql2:

npm install mysql2

简单使用:

const mysql = require('mysql2');// 1.创建数据库连接const connection = mysql.createConnection({  host: 'localhost',  port: 3306,  database: 'coderhub',  user: 'root',  passWord: 'Coderwhy888.'});// 2.执行SQL语句const statement = `  SELECT * FROM products WHERE price > 6000;`connection.query(statement, (err, results, fields) => {  console.log(results);});

如果我们想要在拿到数据后停止服务,可以在回调函数中写上:

connection.end()

完整代码:

connection.query(statement, (err, results, fields) => {  console.log(results);  connection.end();});

Prepared Statement(预处理语句)

提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储
它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所以性能是更高的;

强调:如果再次执行该语句,它将会从LRU(Least Recently Used) Cache中获取获取,省略了编译statement的时间来提高性能。

// 2.执行SQL语句: 使用 ?来对参数进行占位const statement = `  SELECT * FROM products WHERE price > ? AND score > ?;`connection.execute(statement, [6000, 7], (err, results) => {  console.log(results);});

Connection Pools(连接池)

前面我们是创建了一个连接(connection),但是如果我们有多个请求的话,该连接很有可能正在被占用,那么我们是否需要每次一个请求都去创建一个新的连接呢?

  • 事实上,mysql2给我们提供了连接池(connection pools);

  • 连接池可以在需要的时候自动创建连接,并且创建的连接不会被销毁,会放到连接池中,后续可以继续使用;

  • 我们可以在创建连接池的时候设置LIMIT,也就是最大创建个数;

判断是否连接成功

const mysql = require('mysql2');// 1.创建连接池const connections = mysql.createPool({  host: 'localhost',  port: 3306,  database: 'coderhub',  user: 'root',  password: 'Coderwhy888.',  connectionLimit: 10});connections.getConnection((err, conn) => {  conn.connect((err) => {    if(err){      console.log('连接失败:',err)    } else {      console.log('数据库连接成功~')    }  })})

简单使用数据库

const mysql = require('mysql2');// 1.创建连接池const connections = mysql.createPool({  host: 'localhost',  port: 3306,  database: 'coderhub',  user: 'root',  password: 'Coderwhy888.',  connectionLimit: 10});// 2.使用连接池const statement = `  SELECT * FROM products WHERE price > ? AND score > ?;`connections.execute(statement, [6000, 7], (err, results) => {  console.log(results);});

Promise方式

const mysql = require('mysql2');// 1.创建连接池const connections = mysql.createPool({  host: 'localhost',  port: 3306,  database: 'coderhub',  user: 'root',  password: 'Coderwhy888.',  connectionLimit: 10});// 2.使用连接池const statement = `  SELECT * FROM products WHERE price > ? AND score > ?;`connections.promise().execute(statement, [6000, 7]).then(([results,fields]) => {  console.log(results);}).catch(err => {  console.log(err);});

sequelize

对象关系映射(ORM):是一种程序设计的方案:

  • 从效果上来讲,它提供了一个可在编程语言中,使用虚拟对象数据库的效果

Node当中的ORM我们通常使用的是sequelize;

  • Sequelize是用于Postgres,MySQL,MariaDB,SQLite和Microsoft SQL Server的基于node.js 的ORM;

  • 它支持非常多的功能;

如果我们希望将Sequelize和MySQL一起使用,那么我们需要先安装两个东西:

  • mysql2:sequelize在操作mysql时使用的是mysql2;

  • sequelize:使用它来让对象映射到表中;

npm install sequelize mysql2

Sequelize的使用

Sequelize的连接数据库:

创建一个Sequelize的对象,并且指定数据库、用户名、密码、数据库类型、主机地址等;

测试连接是否成功;

const { Sequelize } = require('sequelize');const sequelize = new Sequelize('coderhub', 'root', 'Coderwhy888.', {  host: 'localhost',  dialect: 'mysql'//连接的数据库类型:mysql,monGoose});sequelize.authenticate().then(() => {  console.log("连接数据库成功~");}).catch(err => {  console.log("连接数据库失败~", err);});

Sequelize的单表操作

const { Sequelize, DataTypes, Model, Op } = require('sequelize');const sequelize = new Sequelize("coderhub", 'root', 'Coderwhy888.', {  host: 'localhost',  dialect: 'mysql'})//1.首先我们需要将数据库中的一张表映射成一个class类class Product extends Model {}Product.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,//主键    autoIncrement: true//自动增长  },  title: {    type: DataTypes.STRING,    allowNotNull: false//是否可以为空  },  price: DataTypes.DOUBLE,  score: DataTypes.DOUBLE}, {//与数据库的表进行映射的配置  tableName: 'products',  createdAt: false,  updatedAt: false,  sequelize});//存放操作数据库的代码async function queryProducts() {  //1.查询数据库中product表中所有的内容  const result1 = await Product.findAll({    where: {//在这里配置条件      price: {        [Op.gte]: 5000//意思是价格大于等于5000        //gte:大于等于,gt:大于,lt:小于,lte:小于等于      }    }  });  console.log(result1);  // 2.插入数据  const result2 = await Product.create({    title: "三星Nova",    price: 8888,    score: 5.5  });  console.log(result2);  // 3.更新数据  const result3 = await Product.update({    price: 3688  }, {    where: {      id: 1    }  });  console.log(result3);}queryProducts();//执行这个函数可以实现对数据库的操作

Sequelize的一对多操作

const { Sequelize, DataTypes, Model, Op } = require('sequelize');const sequelize = new Sequelize("coderhub", 'root', 'Coderwhy888.', {  host: 'localhost',  dialect: 'mysql'});//数据库的第一个表: 主表class Brand extends Model {};Brand.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  name: {    type: DataTypes.STRING,    allowNotNull: false  },  website: DataTypes.STRING,  phoneRank: DataTypes.INTEGER}, {  tableName: 'brand',  createdAt: false,  updatedAt: false,  sequelize});//数据库的第二个表:附表class Product extends Model {}Product.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  title: {    type: DataTypes.STRING,    allowNotNull: false  },  price: DataTypes.DOUBLE,  score: DataTypes.DOUBLE,  brandId: {    field: 'brand_id',    type: DataTypes.INTEGER,    references: {//这张表使用了Brand的id作为外键      model: Brand,//product这张表使用了Brand这个表,所以product必须放在下面      key: 'id'    }  }}, {  tableName: 'products',  createdAt: false,  updatedAt: false,  sequelize});// 将两张表联系在一起Product.belongsTo(Brand, {  foreignKey: 'brandId'//外键});async function queryProducts() {  const result = await Product.findAll({    include: { //这里是联合查询:意思是包含别的表的信息      model: Brand    }  });  console.log(result);}queryProducts();

Sequelize的多对多操作

const { Sequelize, DataTypes, Model, Op } = require('sequelize');const sequelize = new Sequelize("coderhub", 'root', 'Coderwhy888.', {  host: 'localhost',  dialect: 'mysql'});// Student表class Student extends Model {}Student.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  name: {    type: DataTypes.STRING,    allowNotNull: false  },  age: DataTypes.INTEGER}, {  tableName: 'students',  createdAt: false,  updatedAt: false,  sequelize});// Course表class Course extends Model {}Course.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  name: {    type: DataTypes.STRING,    allowNotNull: false  },  price: DataTypes.DOUBLE}, {  tableName: 'courses',  createdAt: false,  updatedAt: false,  sequelize});// StudentCourse表:关系表class StudentCourse extends Model {}StudentCourse.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  studentId: {//与Student表建立关系    type: DataTypes.INTEGER,    references: {      model: Student,      key: 'id'    },    field: 'student_id'  },  courseId: {//与Course表建立关系    type: DataTypes.INTEGER,    references: {      model: Course,      key: 'id'    },    field: 'course_id'  }}, {  tableName: 'students_select_courses',  createdAt: false,  updatedAt: false,  sequelize});// 多对多关系的联系:Student StudentCourse CourseStudent.belongsToMany(Course, {  through: StudentCourse,  foreignKey: 'studentId',//这里是Student与StudentCourse,所以外键是studentId  otherKey: 'courseId'//StudentCourse与Course,所以外键是courseId});//与上面类似Course.belongsToMany(Student, {  through: StudentCourse,  foreignKey: 'courseId',  otherKey: 'studentId'});async function queryProducts() {  const result = await Student.findAll({    include: {//所有学生的选课情况      model: Course    }  });  console.log(result);}queryProducts();

读到这里,这篇“Nodejs中koa2怎么连接mysql”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: Nodejs中koa2怎么连接mysql

本文链接: https://lsjlt.com/news/343459.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Nodejs中koa2怎么连接mysql
    本文小编为大家详细介绍“Nodejs中koa2怎么连接mysql”,内容详细,步骤清晰,细节处理妥当,希望这篇“Nodejs中koa2怎么连接mysql”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。将查询结果转为...
    99+
    2023-07-02
  • Nodejs中koa2连接mysql的实现示例
    目录将查询结果转为对象或者数组mysql2的使用Prepared Statement(预处理语句)Connection Pools(连接池)Promise方式sequelizeSeq...
    99+
    2024-04-02
  • html怎么连接nodejs
    随着近年来Web应用程序的高速发展,Node.js(一个轻量级的 JavaScript 运行时环境)也被广泛应用于开发各种服务端应用程序。HTML是Web端的核心语言,那么如何将HTML连接到Node.js后端呢?本文将为您一一解答。为了更...
    99+
    2023-05-14
  • NodeJS中怎么链接MySql数据库
    今天就跟大家聊聊有关NodeJS中怎么链接MySql数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。如下所示://1.用npm命令安装mysql...
    99+
    2024-04-02
  • nodejs如何连接mysql数据库
    这篇文章主要介绍nodejs如何连接mysql数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本篇文章给大家介绍一下使用nodejs连接mysql数据库的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大...
    99+
    2023-06-14
  • C++中怎么连接MySQL
    C++中怎么连接MySQL,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、为什么使用MySQL C API效率!C++可以通过多种方式连接上...
    99+
    2024-04-02
  • mysql中外连接怎么写
    小编给大家分享一下mysql中外连接怎么写,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql中外连接可以分为左外连接和右外...
    99+
    2024-04-02
  • MySQL中怎么实现左连接和右连接
    今天就跟大家聊聊有关MySQL中怎么实现左连接和右连接,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。以MySql为例。在MySQL数据库中建立两张数...
    99+
    2024-04-02
  • nodejs中如何连接数据库
    这篇文章主要介绍了nodejs中如何连接数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 nodejs连接mysql1.准备工...
    99+
    2024-04-02
  • MYSQL中怎么连接字符串
    MYSQL中怎么连接字符串,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  MYSQL字符串怎么连接  在MYSQL中也可以使用加号“+”来连...
    99+
    2024-04-02
  • mysql 中怎么实现外连接
    这篇文章将为大家详细讲解有关mysql 中怎么实现外连接,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先my sql 不支持oracle的(+) ...
    99+
    2024-04-02
  • nodejs怎么连接ftp实现上传下载
    这篇文章主要介绍“nodejs怎么连接ftp实现上传下载”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs怎么连接ftp实现上传下载”文章能帮助大家解决问题。依赖//ftp 模块是...
    99+
    2023-07-06
  • nodejs进阶(6)—连接MySQL数据库示例
    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE ...
    99+
    2022-06-04
    进阶 示例 数据库
  • sqlyog怎么连接mysql
    本篇文章为大家展示了sqlyog怎么连接mysql,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。sqlyog怎么连接mysql1.进入sqlyog页面2.点击新建M...
    99+
    2024-04-02
  • navicat怎么连接mysql
    这篇文章将为大家详细讲解有关navicat怎么连接mysql,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。navicat怎么连接mysql?1. 安装mysql...
    99+
    2024-04-02
  • javaweb怎么连接mysql
    javaweb连接mysql数据库的方法首先,需要在MySQL官网下载MySQL驱动包,并将驱动包复制到javaweb项目的lib目录下;在MySQL中创建一个需要连接的数据库和表;create database jdb...
    99+
    2024-04-02
  • python3怎么连接mysql
    使用python3连接mysql数据库的方法代码如下:#!/usr/bin/python3import pymysql# 打开数据库连接db = pymysql.connect("localhost"...
    99+
    2024-04-02
  • java怎么连接mysql
    java连接mysql的方法:1.下载mysql的jar驱动文件;2.配置好jdbc,新建类,写入连接代码;3.运行代码,当连接成功后,控制台会打印成功连接的信息。java连接mysql的方法:下载mysql的jar驱动文件,下载地址htt...
    99+
    2024-04-02
  • php怎么连接mysql
    php连接mysql的方法:在php中,这个任务通过 mysql_connect() 函数完成。注意要确定mysql服务是启动的,并且需要输入您mysql的相关信息。$con = mysql_connect("...
    99+
    2024-04-02
  • jdbc怎么连接MySQL
    要连接MySQL数据库,可以使用JDBC(Java Database Connectivity)库。以下是连接MySQL数据库的步骤...
    99+
    2023-09-16
    jdbc MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作