ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2020/12/07 - TIL(Sequelize ORM)
    Develop/Database 2020. 12. 8. 00:41

     

     

    ORM 이란?

    ORM(Object-Relational-Mapping)이란 객체와 관계와의 설정을 의미합니다. 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용합니다. 여기서 객체 모델과 관계형 모델 간에 불일치가 존재하게 되는데 이 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결하는 것이 ORM입니다.

     

     

    ORM은 MVC패턴에서 Model에 해당합니다.

     

     


     

    Sequalize란?

    Sequalize란 node.js 환경에서 MySQL등 관계형 데이터 데이터를 다룰 때 query문을 작성하지 않고 데이터를 쉽게 다룰 수 있도록 도와주는 라이브러리입니다. 

     

     

     

    설치하기

    npm을 사용하여 sequalize를 설치합니다. sequalize-cli는 터미널에서 sequalize를 조작할 수 있게 해 줍니다. 두 가지를 설치 한 뒤 sequalize init을 실행하여 초기화를 시켜줍니다. 초기화를 시키게 되면 config, models, migrations, seeders 폴더가 생성됩니다.

    npm install --save sequelize
    
    npm install -g --save-dev sequelize-cli
    
    sequelize init

     

     

    Sequalize 설정

    config / config.json 파일에서 자신의 데이터베이스 환경에 맞게 설정이 가능합니다. sequalize를 init 했을 때 초기값을 자신의 프로젝트에 맞게 변경합니다.

    {
      "development": {
        "username": "root",
        "password": null,
        "database": "database_development",
        "host": "127.0.0.1",
        "dialect": "mysql"
      },
      "test": {
        "username": "root",
        "password": null,
        "database": "database_test",
        "host": "127.0.0.1",
        "dialect": "mysql"
      },
      "production": {
        "username": "root",
        "password": null,
        "database": "database_production",
        "host": "127.0.0.1",
        "dialect": "mysql"
      }
    }
    • username : 사용자 명
    • password : 사용자 비밀번호
    • database : 사용할 데이터베이스 이름 (데이터 베이스는 미리 생성 해놓아야 합니다.)
    • host : host 주소
    • dialect : 사용하는 관계형 데이터 베이스 이름

     

     

    모델 생성하기

     

    cli

    npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
    • name : 모델의 이름
    • attributes : 모델의 속성 목록

    위 명령어를 실행하게 되면 models 폴더에 user라는 모델 파일이 생성됩니다.

     

     

    Migration 실행

    npx sequelize-cli db:migrate

    마이그레이션을 실행하여 생성된 모델을 실제 데이터 베이스의 테이블로 생성합니다.

     

     

    Migration 실행취소

    npx sequelize-cli db:migrate:undo

     

     


     

    Model Querying

     

    INSERT

    • create(values : Object, options : Object) row 생성하기
    • findOrCreate(options : Object ) 조회 시 없을때 생성하기
    • findCreateFind(options : Object) 조회시 없으면 생성 후 조회하기
    • upsert(values : Object, options : Object) 한 레코드만 인서트 하거나 업데이트 하기

     

    SELECT

    • findOne(options : Object) 하나만 조회하기
    • findAll(options : Object) 여러 개 조회하기
    • findAndCountAll(findOptions : Object) 조회 후 총 수 조회
    • findByPk(id : number | String | Buffer, options : Object) pk로 조회하기
    • findCreateFind(options : Object) 조회 시 없으면 생성 후 조회하기
    • findOrCreate(options : Object) 조회 후 없으면 생성하기

     

    UPDATE

    • update(values : Object, options : Object) 값을 업데이트 하기
    • increament(options : Object) 값 증가시키기
    • decreament(options : Object) 값 감소시키기

     

    DELETE

    • destroy(options : Object) 한 개나 여러 개 레코드를 삭제하기

     

     

    Example

    // Create a new user
    const jane = await User.create({ firstName: "Jane", lastName: "Doe" });
    
    
    // Find all users
    const users = await User.findAll();
    
    Model.findAll({
      attributes: ['foo', 'bar']
    }); //SELECT foo, bar FROM ...
    
    
    Post.findAll({
      where: {
        authorId: 2
      }
    });// SELECT * FROM post WHERE authorId = 2
    
    
    // Change everyone without a last name to "Doe"
    await User.update({ lastName: "Doe" }, {
      where: {
        lastName: null
      }
    });
    
    
    // Delete everyone named "Jane"
    await User.destroy({
      where: {
        firstName: "Jane"
      }
    });
    
    
    // Truncate the table
    await User.destroy({
      truncate: true
    });

     

    'Develop > Database' 카테고리의 다른 글

    2020/12/08 - TIL(Sequelize Associations 1 : N)  (0) 2020.12.08
    2020/12/04 - TIL(Express MySQL 연동)  (0) 2020.12.04
    2020/12/02 - TIL(DataBase - MySQL)  (0) 2020.12.02
Designed by Tistory.