golang orm對比

來源:互聯網
上載者:User

各主流的golang orm介紹

當前較為主流/活躍的orm有gorm、xorm、gorose等

xorm

  • 文檔

    • github
    • document
    • godoc
  • 支援的資料庫有:mysql、mymysql、postgres、tidb、sqlite、mssql、oracle
  • 事務性支援
  • 鏈式api

    has, err := engine.Where("name = ?", name).Desc("id").Get(&user)err := engine.Where(builder.NotIn("a", 1, 2).And(builder.In("b", "c", "d", "e"))).Find(&users)
  • 支援原生sql操作
  • 查詢快取
  • 可根據資料庫反轉產生代碼
  • 級聯載入
  • 提供sql語句日誌輸出
  • 支援批量查詢處理

    // 每次處理100條// SELECT * FROM user Limit 0, 100// SELECT * FROM user Limit 101, 100err := engine.BufferSize(100).Iterate(&User{Name:name}, func(idx int, bean interface{}) error {    user := bean.(*User)    return nil})
  • 自動化的讀寫分離/主從式
dataSourceNameSlice := []string{masterDataSourceName, slave1DataSourceName, slave2DataSourceName}engineGroup, err := xorm.NewEngineGroup(driverName, dataSourceNameSlice)

gorm

  • 文檔

    • github
    • gorm
  • hook機制(Before/After Create/Save/Update/Delete/Find)
  • 對象關係Has One, Has Many, Belongs To, Many To Many, Polymorphism
  • 熱載入
  • 支援原生sql操作
  • 事務性
  • 鏈式api

    tx := db.Where("name = ?", "jinzhu").Where("age = ?", 20).Find(&users)
  • 支援的資料庫有:mysql、postgre、sqlite、sqlserver
  • 查詢操作

    // Get first record, order by primary keydb.First(&user)//// SELECT * FROM users ORDER BY id LIMIT 1;// plain sqldb.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users)// mapdb.Where(&User{Name: "jinzhu", Age: 20}).First(&user)//// SELECT * FROM users WHERE name = "jinzhu" AND age = 20 LIMIT 1;

gorose

  • 文檔

    • github
    • document
  • 支援的資料庫有:mysql、postgres、sqlite、mssql、oracle
  • 鏈式api
  • 同時串連多個資料庫和切換
  • 支援原生sql操作
  • 支援批量查詢處理
  • 事務性

    User.Fields("id, name").Where("id",">",2).Chunk(2, func(data []map[string]interface{}) {    // for _,item := range data {    //     fmt.Println(item)    // }    fmt.Println(data)})

upper/db

同時支援nosql和sql的orm不多,這是其中之一 (另一個是beedb,已經四年沒有更新了). upper/db對多種資料庫進行封裝,提供統一的介面進行CRUD.

  • 文檔

    • github
    • document or tour
  • 支援的資料庫有:PostgreSQL, MySQL, SQLite, MSSQL, QL and MongoDB.
  • 不支援根據資料庫類產生資料庫表等DCL操作,只有DQL,DML
  • 與大部分orm 架構相同,提供串連池
  • 對RDBMS支援事務性
sess, err := postgresql.Open(settings)if err != nil {    log.Fatalf("db.Open(): %q\n", err)}defer sess.Close()var books []Bookerr = sess.Collection("books").Find().All(&books)

總結

  • 相似性

    • 各orm支援的資料庫都基本相同(主流資料庫都支援)
    • 支援事務性、鏈式查詢等
  • 差異

    • xorm、gorose支援批量查詢處理
    • xorm支援主從式讀寫分離
    • gorm支援熱載入
    • gorose便於在多個資料庫切換
    • 文檔全面性gorm>xorm>gorose
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.