Sequelize

Sequelize 是一款能控制 PostgreSQL、MySQL、SQLite 的 ORM ,ORM 簡單來說就是別人封裝好可以直接操做資料庫的工具,而不直接使用 SQL 語法對資料庫進行操作。 這樣有以下優點:

  • 開發人員不用管底層使用哪種資料庫,都能使用同樣的程式碼降低程式與資料庫間的耦合
  • ORM 能幫你擋掉大多數的 SQL 注入攻擊 ( SQL Injection )
  • 提高開發效率
  • 方便轉移資料庫,本地測試時能使用 SQLite,正式上線時再轉移成 MySQL

缺點:

  • 效能上的犧牲
  • 在複雜的查詢上 ORM 有可能不支援

Data Type

開始使用 Sequelize

定義 table

module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define('User', {
    // 欄位名稱:: 欄位型態
    username: DataTypes.STRING,
    email: DataTypes.STRING,
    password: DataTypes.STRING,
    age: DataTypes.INTEGER,
  }, {
    classMethods: {
      associate: (models) => {
      }
    }
  });

  return User;
};

新增 user

await models.User.create({
  username: 'test',
  email: '[email protected]',
  password: '123123',
  age: 18,
});

根據 id 查詢 user

await models.User.findById(userId);

根據 email 查詢 user

let user = await models.User.findOne({
  where: {
    email: '[email protected]',
  },
});

更新 user 資料

let user = await models.User.findById(userId);
user.password = '123123';
await user.save();

刪除 user

let user = await models.User.findById(userId);
await user.destroy();

進階

一次創建多組資料

const userList = [
  { username: 'test1', password: 'test1', email: '[email protected]', age: 18 },
  { username: 'test2', password: 'test2', email: '[email protected]', age: 30 },
  { username: 'test3', password: 'test3', email: '[email protected]', age: 20 },
  { username: 'test4', password: 'test4', email: '[email protected]', age: 23 },
];
await models.User.bulkCreate(userList);

進階查詢

查找 18 ~ 23 歲的 user

const user = await models.User.findAll({
  where: {
    age: {
      $between: [18, 23],
    },
  },
});

查找 email 為 gmail 的 user

const user = await models.User.findAll({
  where: {
    email: {
      $like: '%@gmail.com',
    },
  },
});

根據 age 排序 user

const user = await models.User.findAll({
  order: 'age ASC',
});

results matching ""

    No results matching ""