Node中使用Mysql
mysql2
在Node的代码中执行SQL语句借助于mysql2
- 更快/更好的性能;
- Prepared Statement(预编译语句):
- 提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所以性能是更高的;
- 防止SQL注入:之后传入的值不会像模块引擎那样就编译,那么一些SQL注入的内容不会被执行;or 1 = 1不会被执行;
基本使用
1 2 3 4 5 6 7 8
| const connection =mysql2.createConnection({ host:'localhost', port: 3306, database: 'coderhub', user: 'root', password: 'coderhyp888.' });
|
1 2 3 4 5 6
| const statement = ` SELECT * FROM products; ` connection.query(statement,(err,results,fields)=>{ console.log(results); })
|
Prepared Statement 预编译语句
- 提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所以性能是更高的;
- 防止SQL注入:之后传入的值不会像模块引擎那样就编译,那么一些SQL注入的内容不会被执行;or 1 = 1不会被执行;
- 如果再次执行该语句,它将会从LRU(Least Recently Used) Cache中获取获取,省略了编译statement的时间来提高性能。
Connection Pools 连接池
- 连接池可以在需要的时候自动创建连接,并且创建的连接不会被销毁,会放到连接池中,后续可以继续使用
- 我们可以在创建连接池的时候设置LIMIT,也就是最大创建个数;
1 2 3 4 5 6 7 8
| const connection =mysql2.createPool({ host:'localhost', port: 3306, database: 'coderhub', user: 'root', password: 'coderhyp888.', connectionLimit: 10 });
|
1 2 3 4 5 6 7
| const statement2= ` SELECT * FROM products WHERE price>? AND score > ?; ` connection.execute(statement2,[6000,8],(err,result)=>{ console.log(result); })
|
promise方式
1 2 3 4 5 6 7 8
| const statement2= ` SELECT * FROM products WHERE price>? AND score > ?; ` connection.promise().execute(statement2,[6000,8]).then(([result])=>{ console.log(result); }).catch(err=>{ console.log(err); })
|
ORM 对象关系映射
Node当中的ORM我们通常使用的是 sequelize;
- Sequelize是用于Postgres,MySQL,MariaDB,SQLite和Microsoft SQL Server的基于Node.js 的 ORM
- 它支持非常多的功能
Sequelize的使用
Sequelize的连接数据库:
- 第一步:创建一个Sequelize的对象,并且指定数据库、用户名、密码、数据库类型、主机地址等;
- 第二步:测试连接是否成功