Sequelize使用總結
sequelize是nodejs開發環境中的orm框架,基於promise,支援mysql,postgres,sqlite,Microsoft SQL Server.
以下記錄使用的一些心得體會:
為什麼使用orm框架
在java中如果不使用orm框架,我們會提前定義很多bean類(也叫Model類),然後編寫sql查詢語句從資料庫中查詢得到結果集,然後需要自己手動轉換成bean類,而編寫bean類和轉換成bean類需要花費不少時間,而這些工作都是很瑣碎,繁雜的,如果能自動生成則最好。Java也有orm框架,能夠自動生成這些bean類,比如jooq.
使用sequlize的orm框架的理由:
-
減少在資料庫中定義表的繁雜工作,可在程式碼中定義表結構及關聯關係
-
可為Model類新增自定義方法,以及校驗方法,防止不符合規則得資料
-
自動優化sql語句,可防注入
-
若表之間有關聯關係,使用物件操作方法即可輕鬆建立,更新,查詢關聯的物件
-
在nodejs中查詢資料,無須手動轉換為bean類,也無需轉換為json再發給客戶端
如何優雅地使用sequelize
-
建議用Sequelize接管資料庫表的建立工作
在模型類中定義好欄位,以及型別,然後使用sequelize的同步方法,將表的定義同步到資料庫中,可自動在資料庫中建立好表結構,並設定表之間的關係
如果直接在資料庫中定義表,然後使用sequelize-auto-import的方式將表結構轉換成Model類也可行,但是不方便給Model類新增自定義方法,校驗方法,以及表之間的關係,所以更推薦使用Sequelize接管資料庫表的建立工作
-
自動新增常用欄位
表字段可自動新增create_time, update_time,deleted 等常用欄位, 當然也可不用這些欄位,但是大部分表其實都需要這些欄位,可以減少大量重複工作
-
設定表之間的關聯關係用處大
若設定了表之間的關聯關係 可很方便地建立,查詢,更新關聯資料
只要設定了belongTo, hasOne, hasMany, belongsToMany關係,那麼源物件就可擁有get,set方法來取關聯關係的目標物件
比如:
GiftOrder.belongsTo(PayOrder, { foreignKey: 'order_no', as : 'payOrder' })
那麼GiftOrder的例項就有了getPayOrder,setPayOrder方法,甚至在建立GiftOrder物件時可跟一個PayOrder物件,寫到資料庫時可同時寫入,另外查詢GiftOrder時可使用
eager loading
的技術同時將關聯的PayOrder物件拿到,非常方便
參考資料
ofollow,noindex" target="_blank">sequelize官方文件