-
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