본문 바로가기
Back-End Frameworks/Node.js

15)Nodejs_MySQL(4)_Sequelize로 CRUD, 관계 쿼리

by Downy_J 2023. 7. 21.
728x90
반응형
SMALL

SQL문이 아닌 JS를 사용해 DB안의 값을 불러 올거다

 

Create(생성)

 

SQL
models 모듈에서 User 모델을 불러와 create 메서드를 쓰면됨.
※ 데이터를 넣을 시 MySQL의 자료형이 아닌
Sequelize 모델에 정의한 자료형대로 넣어야 함.
(이게 married가 0 이 아닌 false인 이유)
알아서 MySQL 형태로 바꿔주기 때문에
Sequelize에 부합하지 않는걸 넣을 시 에러가 날 수 있다
Sequelize


 

Read(조회)

SQL
테이블의 데이터 다 가져오기
Sequelize
SQL
테이블의 데이터 하나만 가져오기
Sequelize
SQL
테이블 안 원하는 조건의 컬럼 데이터만 가져오기
Sequelize
SQL
테이블 안 조건을 걸어 해당하는
데이터만 가져오기

- MySQL에는 JS에 있는 undefined라는 자료형이 없다. 때문에 빈값을 넣으려면 null을 쓰자

- 시퀄은 JS 객체를 통해 쿼리를 생성하기 때문에 Op.gt 같은 특수 연산자들이 사용된다. Sequelize안의 [ Op.gt(초과) | Op.gte(이상) | Op.lt(미만) | Op.lte(이하) | Op.ne(같지않음) | Op.or(또는) | Op.in(배열 요소에 포함) | Op.notIn(배열 요소에 불포함) ]
Sequelize
SQL
Op.or 속성에 OR 연산을 적용할 qurey들을 
배열로 나열하면 됨.
Sequelize
SQL
- Sequelize 의 정렬 하는방법이다.
- 배열안의 배열인점 주의해야함
(두 컬럼이상으로도 정렬을 할 수도 있기 때문)

Sequelize
SQL
조회 할 row 갯수 설정하는 방법.
(LIMIT 1 인경우 findAll 대신 findOne을 써도 되지만, limit 옵션을 쓸수도 있음.)
Sequelize
SQL
OFFSET 역시 offset 속성으로 구현 가능함.
Sequelize

 

Update(수정)

SQL
update 메서드로 수정 가능!
첫번째 인수 = 수정할 내용
두번째 인수 = 어떤 row 수정할지 조건
(where 옵션에 조건을 넣는다.)
Sequelize

 

Delete(삭제)

SQL
destory 메서드로 삭제!
where 옵션에 조건을 넣는다.
Sequelize

관계 쿼리

MySQL의 JOIN같은 기능을 Sequelize에서도 구현이 된다.

 

User 모델은 Comment 모델과 hasmany - belongsTo 관계가 맺어져 있다는걸 기억해야 한다.

 

특정 사용자를 가져오면서

그 사람의 댓글 까지 모두 갖고 오고 싶다면?

어떤 모델과 관계가 있는지 이 include 배열에 넣어주면 됨.
(배열인 이유는 다양한 모델과 관계가 있을 수 있기 때문임.)

댓글에만 접근 할 수도 있다.

이렇게 관계를 설정했다면
getComments(조회) | setComments(수정) | addComment(하나 생성) |
addComments(여러개 생성) | removeComments(삭제)

등의 메서드를 지원 한다

동사 뒤에 모델의

이름동사 뒤의 모델 이름을 

바꾸고 싶다면?

저 관계 설정 시 as 옵션을 쓰면됨.

관계를 설정 할 때 등록 시에 먼저
as로 등록을 한다음(model에서 하는거 알쥬?)

쿼리 할때는 이렇게 쓰면 된다.

이렇게 as를 설정하게 되면

include 시 추가되는 댓글 객체도

user.Ansers로 바뀜.

 


댓글 불러오는데 id 가 1인 값만 가져오기
include나 관계 쿼리 메서드에도
where이나 attributes 같은 옵션을 쓸 수 있다.

컬럼 id가 1인 값만 가져오기

쿼리 조회는 이렇게 되지만

수정 | 생성 | 삭제 는 좀 다름.
여러 개를 추가 할땐 배열로 추가 할 수 있음

SQL 쿼리로 쓰기

만약 지금까지 했던거 잘 모르겠으면

그냥 늘 쓰던 SQL 쿼리를 쓰는 방법이 있다

(사실 이게 더 편함. . 이게 더 쉽고 익숙함.)

난 이 방식이 더 편리하다 생각하는데..

ORM을 쓰는편이 좋다고 한다.

 

이건 Sequelize 쿼리로 할 수 없는 경우에만 사용하도록 하자.

 

728x90