Sequelize(시퀄라이즈)는 node.js의 ORM으로,
MySQL, Postgres, MariaDB, SQLite, Microsoft SQL Server를 사용할 때
raw query문을 사용하지 않고 쉽게 다룰 수 있도록 도와주는 라이브러리
Object Relational Mapping
관계형 데이터베이스의 데이터와 객체를 매핑해주는 것이다.
기존의 객체와 테이블 사이의 Dismatch가 발생하는 것을 줄여 개발자가 Object Model에만 집중하여 개발할 수 있도록 한다.
Java에서 Hibernate가 있다면, Node.js에선 Sequelize가 있다.
(mysql 사용을 가정함)
npm install sequelize
npm install mysql2
npm install --global sequelize-cli
sequelize init
초기화 후 디렉토리 모습
.
├── config
│ └── config.json
├── migrations
├── models
│ └── index.js
└── seeders
/config/config.json
/models/index.js
migrations
seeders
모델을 정의하는 메소드는 define()
sequelize.define('객체이름', 스키마 정의, 테이블 설정)
으로 사용함
module.exports = (sequelize, DataTypes) => {
var User = sequelize.define('User',
{
id:{
type : DataTypes.INTEGER,
unique : true
allowNull : false
},
passwd: {
type : DataTypes.STRING,
allowNull : false
}
},{
timestamps : false
}
)
User.associate = (models) => {
//associations can be defined here
}
return User
}
위와 같이 모델을 작성할 수 있음.
create()
를 사용하면 내부적으로 INSERT
쿼리가 실행됨.
인자로 데이터 객체를 정의하여 전달.
User.create({
id: 1,
passwd : "hello"
}).then(()=>{
console.log('success');
}.catch(error => {
throw error
})
findAll()
을 사용하면 내부적으로 SELECT
쿼리가 실행됨.
인자로 where 조건문 전달할 수 있음. (생략도 가능)
User.findAll({
where : { id : 1 }
})
이 외에도
findById()
findOne()
findOrCreate()
findAndCountAll()
더 다양한 데이터 조회 문법을 알고싶다면 여기를 확인해보는 것을 추천.
수정할 부분을 찾기 위해 findOne()
메서드 사용 후, update()
수행
User.findOne({
where : { id : 1 }
}).then( user => {
if(user) {
user.update({ passwd : "Hi" })
.then(() => console.log('success')
}
})
destroy()
를 사용하면 내부적으로 DELETE
쿼리 실행
where 조건문을 작성하지 않으면 모든 데이터가 삭제됨.
User.destroy({
where : { id : 1 }
}).then(()=>{
console.log('success');
})
User.associate = (models) => {
// 관계 정의
}
hasOne()
: 부모 테이블이 관계를 맺는 대상(자식)에게 본인의 외래키를 추가belongsTo()
: 자식 테이블이 관계를 맺는 대상(부모)에게 외래키를 받아 추가hasOne()
belongsTo()
belongsTo()
: 두 테이블을 연결, through
옵션을 사용해서 중간 테이블의 이름을 명시해주어야 함.as
: 상대 테이블의 이름을 지정foreignKey
: 외래키 이름을 지정참조 링크
https://gngsn.tistory.com/71
https://victorydntmd.tistory.com/32
https://baeharam.netlify.app/posts/Node.js/Node.js-Sequelize-%EB%8B%A4%EB%A3%A8%EA%B8%B0
https://gmlwjd9405.github.io/2019/02/01/orm.html