nodejs连接数据:mysql/mysql2/Knex.js/Sequelize库区别
Author:zhoulujun Date:
在 Node.js 中,有几个库可以用来连接和操作 MySQL 数据库,其中最常用的是 mysql 和 mysql2。如果不止连接mysql,推荐你使用 knex.js 或 sequelize。
mysql vs mysql2
Node.js MySQL 和 MySQL2 是两个不同的 Node.js 模块,用于在 Node.js 中连接和操作 MySQL 数据库。
MySQL 模块是一个第三方模块,提供了简单易用的 API 来连接和操作 MySQL 数据库。它支持连接池、事务等功能。
MySQL2 模块是由官方提供的,与 Node.js MySQL 模块类似,也用于连接和操作 MySQL 数据库。 MySQL2 支持最新的 MySQL 版本,并提供了更高效的性能、更丰富的功能以及更好的兼容性。
看npm包搜索,就知道区别了
之前使用mysql库,是没有办法。现在官方有了,还是用官方的。
MySQL2的历史以及选择原因
看官方回答:
MySQL2 项目是 MySQL-Native 的延续。 协议解析器代码从头开始重写,api 更改为匹配流行的 mysqljs/mysql。 MySQL2 团队正在与 mysqljs/mysql 团队合作,将共享代码分解并移至 mysqljs 组织下。
MySQL2 大部分 API 与 mysqljs 兼容,并支持大部分功能。 MySQL2 还提供了更多的附加功能:
更快、更好的性能
MySQL二进制日志协议
对编码和排序规则有很好的支持
支持压缩
SSL 和 Authentication Switch
MySQL2 需要注意的是:SQL预处理的使用、连接池的使用
mysql.createConnection vs mysql.createPool
mysql.createConnection 和 mysql.createPool 是 Node.js 中 mysql 库提供的两种不同的连接方式。它们之间的主要区别在于连接管理和性能。
mysql.createConnection:
mysql.createConnection 创建一个到 MySQL 数据库的单个连接。每次调用此方法时,都会创建一个新的连接。当你完成查询后,需要手动关闭连接,以避免资源泄漏。这种方式适用于只需要执行少量查询的简单场景。
mysql.createPool:
mysql.createPool 创建一个连接池,它可以管理多个到 MySQL 数据库的连接。连接池在创建时会预先建立一定数量的连接,并在需要时自动分配和回收连接。这种方式在处理大量并发查询时具有更好的性能,因为它可以重用已经建立的连接,而不是为每个查询创建新的连接。
当使用 mysql.createPool 创建连接池后,你可以使用 pool.query 方法执行查询。在查询完成后,连接会自动返回到连接池,无需手动释放。这是连接池的一个优势,因为它可以自动管理连接的生命周期,减少了手动管理连接的复杂性。
Knex.js VS Sequelize
Knex.js 和 Sequelize 都是用于连接和操作 MySQL 数据库的 Node.js 库,但它们之间有一些关键区别。
Knex.js 是一个 SQL 查询构建器
https://knexjs.org/guide/#configuration-options
Sequelize 是一个对象关系映射(ORM)库。
https://github.com/demopark/sequelize-docs-Zh-CN/blob/master/core-concepts/getting-started.md
如果有java基础,想想: Knex.js vs Sequelize 是不是和java里面的 mybatis vs hibernate 的区别?
Knex.js 和 Sequelize 与 Java 里面的 MyBatis 和 Hibernate 之间的区别有一定的相似性。这两对库都分别代表了查询构建器(Query Builder)和对象关系映射(Object-Relational Mapping,ORM)两种不同的数据库访问范式。
Knex.js vs MyBatis:
Knex.js(Node.js)和 MyBatis(Java)都是查询构建器。它们允许你编写 SQL 查询并将结果映射到对象。这两个库都提供了一定程度的抽象,但仍然保留了对 SQL 查询的直接控制。这使得它们在某些情况下更灵活,但可能需要更多的手动编码。
Sequelize vs Hibernate:
Sequelize(Node.js)和 Hibernate(Java)都是 ORM 库。它们提供了更高级别的抽象,允许你通过操作对象和类来访问和操作数据库,而无需直接编写 SQL 查询。这些库通常提供了丰富的功能,如模型定义、关联、事务等。这使得它们在处理复杂的数据模型和业务逻辑时更方便,但可能需要更多的配置和学习成本。
总之,Knex.js 和 MyBatis 以及 Sequelize 和 Hibernate 之间的区别类似,分别代表了查询构建器和 ORM 两种不同的数据库访问范式。你可以根据你的需求和喜好来选择合适的库。
之前润出去的前同事现在都在搞 Hibernate,我们这些苦逼还在 天天用MyBatis 被产品经理与老板们鞭挞——手动狗头吐槽(像我java转Android,再到h5,前端,真的越来越苦B)。
下面是一个简单的比较,以及如何使用它们连接到 MySQL 数据库的示例。
Sequelize 示例:
sequelize.js 配置文件:
const { Sequelize } = require('sequelize'); const sequelize = new Sequelize('your_database', 'root', 'your_password', { host: 'localhost', dialect: 'mysql' }); module.exports = sequelize;
定义一个模型(例如 User):
const { DataTypes } = require('sequelize'); const sequelize = require('./sequelize'); const User = sequelize.define('User', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, name: { type: DataTypes.STRING } }, { tableName: 'users', timestamps: false }); module.exports = User;
使用 Sequelize 连接到数据库并执行查询:
const User = require('./User'); async function getUsers() { const users = await User.findAll(); console.log(users.map(user => user.toJSON())); } getUsers();
对应国内老板们的“敏捷开发(排大腿排期)”,这个写法头发会更少
Knex.js 示例:
knexfile.js 配置文件:
module.exports = { client: 'mysql', connection: { host: 'localhost', user: 'root', password: 'your_password', database: 'your_database' } };
使用 Knex.js 连接到数据库并执行查询:
const knex = require('knex')(require('./knexfile')); async function getUsers() { const users = await knex('users').select('*'); console.log(users); } getUsers();
像我就直接哟个mysql2了。
转载本站文章《nodejs连接数据:mysql/mysql2/Knex.js/Sequelize库区别》,
请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/JS-Server/8965.html