ORM

ORM,像操作对象一样操作数据库

入门

  • 打开文档https://sequelize.org/,找到Get Started
  • CRM学习

  • yarn add sequelize (安装包)

  • yarn add —dev types/sequelize(类型提示)

安装sequelize

  • yarn add sequelize (安装包)
  • yarn add —dev types/sequelize(类型提示)

    启动docker , 启动一个数据库mysql1

    image.png

进入mysql并创建一个数据库

docker exec -it mysql bash
mysql -u -root -p
create database hasson;
image.png
然后就创建成功了

抄文档的代码 然后改

test.js

  1. const { Sequelize, Model, DataTypes } = require('sequelize');
  2. const sequelize = new Sequelize('database', 'username', 'password', {
  3. dialect: 'mysql'
  4. })

然后将我们的数据库信息写进去

  1. const { Sequelize, Model, DataTypes } = require('sequelize');
  2. const sequelize = new Sequelize('hasson', 'root', '123456', {
  3. dialect: 'mysql'
  4. })
  5. // 创建User模型
  6. class User extends Model { }
  7. // 初始化User
  8. // sequelize去初始化它。 modelNmae 表的名字
  9. User.init({
  10. username: DataTypes.STRING,
  11. birthday: DataTypes.DATE
  12. }, { sequelize, modelName: 'user' });
  13. // 同步到数据库
  14. // sync 同步 把上面创建的user对象,同步到数据库里面
  15. sequelize.sync()
  16. // 然后在user里面创建一条记录
  17. .then(() => User.create({
  18. username: 'janedoe',
  19. birthday: new Date(1980, 6, 20)
  20. }))
  21. // 创建成功后,把这个记录打印出来
  22. .then(jane => {
  23. console.log(jane.toJSON());
  24. });

运行该文件:node test.js
image.png
报错:需要安装mysql2这个包
yarn add mysql2

安装mysql2完成后,再次运行node test.jsimage.png

成功。因为是用的新版本的docker desktop。所以是有默认的host的。

如果要修改host,就在连接数据库的时候加上host:

  1. const sequelize = new Sequelize('hasson', 'root', '123456', {
  2. dialect: 'mysql',
  3. host:'***.***.**.***'
  4. })

到数据库确认是否创建成功

docker exec -it mysql1 bash
mysql -u -root -p
show databases;
use hasson;
show tables;
describe users;
我们创建的是user,但是数据库的是users,应该是sequelize封装了,加了s。
image.png

如何查询数据库

文档:https://sequelize.org/v5/manual/querying.html
写个例子 test2.js

  1. const { json } = require('sequelize');
  2. const { Sequelize, Model, DataTypes } = require('sequelize');
  3. const sequelize = new Sequelize('hasson', 'root', '123456', {
  4. dialect: 'mysql'
  5. // host:'***.***.**.***'
  6. })
  7. // 创建User模型
  8. class User extends Model { }
  9. // 初始化User
  10. // sequelize去初始化它。 modelNmae 表的名字
  11. User.init({
  12. username: DataTypes.STRING,
  13. birthday: DataTypes.DATE
  14. }, { sequelize, modelName: 'user' });
  15. async function run() {
  16. const users = await User.findAll();
  17. console.log(JSON.stringify(users))
  18. sequelize.close() //关闭数据库
  19. }
  20. run()

node test2.js
image.png

删除数据库

代码:

  1. User.destroy({
  2. where: {
  3. id: 1
  4. }
  5. })
  1. const { Sequelize, Model, DataTypes } = require('sequelize');
  2. const sequelize = new Sequelize('hasson', 'root', '123456', {
  3. dialect: 'mysql'
  4. // host:'***.***.**.***'
  5. })
  6. // 创建User模型
  7. class User extends Model { }
  8. // 初始化User
  9. // sequelize去初始化它。 modelNmae 表的名字
  10. User.init({
  11. username: DataTypes.STRING,
  12. birthday: DataTypes.DATE
  13. }, { sequelize, modelName: 'user' });
  14. async function run() {
  15. User.destroy({
  16. where: {
  17. id: 1
  18. }
  19. })
  20. const users = await User.findAll();
  21. console.log(JSON.stringify(users))
  22. sequelize.close()
  23. }
  24. run()

run:
image.png
之前是有数据的,现在数据库变空了

总结

所以使用sequelize的话,是不需要再写查询语句了,需要什么就去抄文档。
然后再修修改改,后面的事情sequelize会处理好。

SQL学习&测验

学习:https://www.w3school.com.cn/sql/index.asp
测验:https://www.w3school.com.cn/quiz/quiz.asp?quiz=sql