医疗做网站,做网站公司昆明,灯饰 技术支持 东莞网站建设,edu网站开发一、认识mysql2
如何可以在Node的代码中执行SQL语句来#xff0c;这里我们可以借助于两个库#xff1a;
mysql#xff1a;最早的Node连接MySQL的数据库驱动#xff1b;mysql2#xff1a;在mysql的基础之上#xff0c;进行了很多的优化、改进#xff1b;目前相对来说这里我们可以借助于两个库
mysql最早的Node连接MySQL的数据库驱动mysql2在mysql的基础之上进行了很多的优化、改进目前相对来说我更偏向于使用mysql2mysql2兼容mysql的API并且提供了一些附加功能
更快/更好的性能Prepared Statement预编译语句
提高性能将创建的语句模块发送给MySQL然后MySQL编译解析、优化、转换语句模块并且存储它但是不执行之后我们在真正执行时会给?提供实际的参数才会执行就算多次执行也只会编译一次所以性能是更高的
防止SQL注入之后传入的值不会像模块引擎那样就编译那么一些SQL注入的内容不会被执行or 1 1不会被执行
支持Promise所以我们可以使用async和await语法
所以后续的学习中会选择mysql2在node中操作数据。
二、使用mysql2
安装mysql2mysql2的使用过程如下 第一步创建连接通过createConnection并且获取连接对象
第二步执行SQL语句即可通过query
const mysql require(mysql2)// 1. 创建数据库连接
const connection mysql.createConnection({host: localhost,port: 3306,database: coderhub,user: root,password: root
})// 2. 执行sql语句
const statement select * from products where price 9000
connection.query(statement, (err, results, fields) {// console.log(err)console.log(results)// console.log(fields)// connection.end()connection.destroy()
})
三、Prepared Statement
Prepared Statement预编译语句
提高性能将创建的语句模块发送给MySQL然后MySQL编译解析、优化、转换语句模块并且存储 它但是不执行之后我们在真正执行时会给?提供实际的参数才会执行就算多次执行也只会编译一次所 以性能是更高的防止SQL注入之后传入的值不会像模块引擎那样就编译那么一些SQL注入的内容不会被执行or 1 1不 会被执行 强调如果再次执行该语句它将会从LRULeast Recently Used Cache中获取获取省略了编译statement的时间来提高性能。
四、Connection Pools
前面我们是创建了一个连接connection但是如果我们有多个请求的话该连接很有可能正在被占用那么我们是否需要每次一个请求都去创建一个新的连接呢
事实上mysql2给我们提供了连接池connection pools连接池可以在需要的时候自动创建连接并且创建的连接不会被销毁会放到连接池中后续可以继续使用我们可以在创建连接池的时候设置LIMIT也就是最大创建个数 五、Promise方式
目前在JavaScript开发中我们更习惯Promise和await、async的方式mysql2同样是支持的
六、认识ORM
对象关系映射英语Object Relational Mapping简称ORM或O/RM或O/R mapping是一种程序设计的方案
从效果上来讲它提供了一个可在编程语言中使用 虚拟对象数据库 的效果比如在Java开发中经常使用的ORM包括Hibernate、MyBatis
Node当中的ORM我们通常使用的是 sequelize;
Sequelize是用于PostgresMySQLMariaDBSQLite和Microsoft SQL Server的基于Node.js 的 ORM它支持非常多的功能
如果我们希望将Sequelize和MySQL一起使用那么我们需要先安装两个东西
mysql2sequelize在操作mysql时使用的是mysql2sequelize使用它来让对象映射到表中
npm install sequelize mysql2
七、Sequelize的使用
Sequelize的连接数据库
第一步创建一个Sequelize的对象并且指定数据库、用户名、密码、数据库类型、主机地址等第二步测试连接是否成功 八、Sequelize映射关系表 const { Sequelize, DataTypes, Model, Op } require(sequelize)
const sequelize new Sequelize(coderhub, root, root, {host: localhost,dialect: mysql
})
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. 查询数据库中products表中的所以内容/*const result await Product.findAll({where: {price: {[Op.gte]: 9000}}})console.log(result)*/// 2. 插入数据/*const result await Product.create({title: 三星zep,price: 99999,score: 10})console.log(result)*/const result await Product.update({price: 3333}, {where: {id: 1}})console.log(result)
}
queryProducts()
九、Sequelize 一对多关系 十、Sequelize多对多关系