본문 바로가기
SQL

MYSQL - NodeJS 3

by 집요한 개발자 2021. 4. 8.

1. 시퀄라이즈 ORM

 SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리

 - ORM : Object Relational Mapping : 객체와 데이터를 매핑(1 대 1 )

 - MySQL 외에도 다른 RDB(Maria, Postgre, SQLite, MSSQL)와도 호환

 - 자바스크립트 문법으로 데이터베이스 조작 가능

 

2. 시퀄라이즈 CLI 사용하기

 시퀄라이즈 명령어 사용하기 위해 sequelize-cli 설치

 Node.js 와 MySQL 을 이어주는 드라이버 mysql2 설치

- 명령어 : npm i sequelize-cli

             npm i mysql2 

             npx sequelize init // 시퀄라이즈 구조생성

동시에 설치가능 npm i express morgan nunjucks sequelize sequelize-cli mysql2

ps. mysql, mysql2 두가지 차이점은 mysql2는 promise와 몇가지 편한 api 를 지원한다는 큰차이점이 있다.

 

3. 시퀄라이즈 모델 사용

  

const Sequelize = require('sequelize');

 

module.exports = class User extends Sequelize.Model {

  static init(sequelize) {

    return super.init({                  // 첫번째 인수 컬럼정의

       // id가 자동으로 생성 (id : Sequelize.INTEGER)을 생략

      name: {

        type: Sequelize.STRING(20), // VARCHAR(20)

        allowNull: false,

        unique: true,

      },

      age: {

        type: Sequelize.INTEGER.UNSIGNED,

        allowNull: false,

      },

      married: {

        type: Sequelize.BOOLEAN,   // TINYINT

        allowNull: false,

      },

      comment: {

        type: Sequelize.TEXT,

        allowNull: true,

      },

      created_at: {

        type: Sequelize.DATE,       // DATETIME, MYSQL DATE -> Sequelize DateOnly

        allowNull: false,

        defaultValue: Sequelize.NOW,

      },

    }, {                                 // 두번째 인수 모델 설정값

      sequelize,

      timestamps: false,           // true 이면 createdAt, updateAt 설정 생성 수정 시간을 자동으로 변경

      underscored: false,          // ex) created_at <-> createAt

      paranoid: false,               // true 이면 soft delete 기능 사용 삭제했을때 일정기간 데이터 유지

      modelName: 'User',

      tableName: 'users',

      charset: 'utf8',                  // utf8mb4 : 이모티콘 사용가능

      collate: 'utf8_general_ci',

    });

  }

 

  static associate(db) {

    db.User.hasMany(db.Comment, {

         foreignKey: 'commenter'sourceKey: 'id' // 외래키와 연결된 주키

    }); 

  /*

    db.Comment.belongsTo(db.User, {

         foreignKey: 'commenter'targetKey: 'id'   // 주키와 연결된 외래키

   });

*/

}

   db.Post.belongsToMany(db.Hashtag, { through : 'PostHashtag' });

   db.Hashtag.belongsToMany(db.Post, { through : 'PostHashtag' });

  // 다대다 관계는 중간 테이블이 생김 (PostHashtag) ┘

 

'SQL' 카테고리의 다른 글

Mysql 설치시 server has failed 에러 해결 방법 중 하나  (0) 2021.12.27
MYSQL - NodeJS 4  (0) 2021.04.09
MYSQL - NodeJS 2.1  (0) 2021.04.08
MYSQL - NodeJS 2  (0) 2021.04.08
MYSQL - NodeJS  (0) 2021.04.07

댓글