[Node.js] Sequelize


SequelizeはNodeです.jsのORMとして.
MySQL、Postgres、MariaDB、SQLite、Microsoft SQL Serverを使用します.
raw query文を使わずに簡単に処理できるライブラリ

ORMとは?


Object Relational Mapping
リレーショナル・データベースのデータとオブジェクトをマッピングします.
既存のオブジェクトとテーブルの不一致を低減し、開発者がオブジェクトモデルの開発に専念できるようにします.
JavaにHibernateがあればNodejsに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→DBの接続情報を設定できます.(データベース、ユーザ名、パスワード、ホストなど)
  • /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
    }
    上記のモデルを作成できます.

    フィールドオプション

  • type : Data Type
  • primaryKey:デフォルト鍵
  • autoIncrement:オートインクリメントオプション(シリアルタイプ)
  • allowNull:NOT NULLか
  • unique:UNIQUE値
  • comment:columnに関する情報
  • validate:columnのvalidation checkオプションを設定
  • configオプション

  • timestamps:テーブルがいつ作成され、最近変更されたかを追跡できます
  • tablename:実際のTable名
  • updatedAt
  • createdAt
  • 偏執狂:削除されたAt列がテーブルに追加されました
  • CRUD


    CREATE

    create()内部で実行INSERTクエリー.
    パラメータを使用してデータ・オブジェクトを定義して渡します.
    User.create({
    	id: 1,
    	passwd : "hello"
    }).then(()=>{
    	console.log('success');
    }.catch(error => {
    	throw error
    })

    READ

    findAll()内部で実行SELECTクエリー.
    WHERE条件文はパラメータとして渡すことができます.(省略可能)
    User.findAll({
    	where : { id : 1 }
    })
    それ以外は
  • findById()
  • findOne()
  • findOrCreate()
  • findAndCountAll()有灯
  • 詳細については、ここです。を参照してください.

    UPDATE

    findOne()メソッドを使用して、変更する部分を検索します.update()
    User.findOne({
    	where : { id : 1 }
    }).then( user => {
    	if(user) {
    		user.update({ passwd : "Hi" })
    		.then(() => console.log('success')
    	}
    })

    DELETE

    destroy()内部で実行DELETEクエリー
    where条件文が作成されていない場合、すべてのデータが削除されます.
    User.destroy({
    	where : { id : 1 }
    }).then(()=>{
    	console.log('success');
    })

    関係の定義

    User.associate = (models) => {
    	// 관계 정의
    }

    1:1マッピング

  • hasOne():親テーブルの関係を確立するターゲット(子)
  • に外部キーを追加
  • belongsTo():サブテーブルは、関係を確立するターゲット(親)から外部キーを取得し、
  • を追加します.

    1:Nマッピング

  • hasOne()
  • belongsTo()
  • N:Mマッピング

  • belongsTo():2つのテーブルを接続し、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