ToyormGo 語言實(shí)現(xiàn)的 ORM 庫
使用 go 實(shí)現(xiàn)的 orm 庫,用 go 的結(jié)構(gòu)體與數(shù)據(jù)庫表關(guān)聯(lián),來簡化各種數(shù)據(jù)庫操作。
特性:
-
語句與查詢:支持Insert/Replace/Find/Delete/Update等操作
-
條件:支持Limit/Offset/Where/Group by/Order by
-
支持事務(wù)
-
預(yù)加載:基于表主鍵的關(guān)聯(lián)查詢 支持BelongTo/OneToOne/OneToMany/ManyToMany 4種模式
-
預(yù)加載條件:操作預(yù)加載的表和操作基本表一樣
-
預(yù)加載查詢聚合:對于預(yù)加載字段會優(yōu)化成Where id in [...]的查詢,一個(gè)預(yù)加載字段永遠(yuǎn)只占一個(gè)Select
-
Result:生成數(shù)據(jù)庫語句報(bào)告和語句導(dǎo)致的錯誤,支持預(yù)加載模式
-
上下文結(jié)構(gòu),可以在數(shù)據(jù)庫語句邏輯中插入自定義邏輯
-
Collection:多數(shù)據(jù)庫操作,該模式下的數(shù)據(jù)必須擁有主鍵,auto_increment模式失效
-
toy-doctor(檢查FieldSelection參數(shù)錯誤)
支持 mysql, sqlite3
go版本 >1.9
安裝
go get github.com/bigpigeon/toyorm
快速開始
package main
import (
"github.com/bigpigeon/toyorm"
_ "github.com/mattn/go-sqlite3"
. "unsafe"
)
type Product struct {
toyorm.ModelDefault
Name string
Price int
}
func panicErr(err error) {
if err != nil {
panic(err)
}
}
func main() {
toy, err := toyorm.Open("sqlite3", "mydb.db")
panicErr(err)
defer func() {
err := toy.Close()
panicErr(err)
}()
// create ToyBrick
brick := toy.Model(&Product{}).Debug()
// create table
_, err = brick.CreateTable()
panicErr(err)
// insert product
_, err = brick.Insert(&Product{
Name: "apple",
Price: 22,
})
panicErr(err)
// update product
_, err = brick.Where("=", Offsetof(Product{}.Name), "apple").Update(Product{Price: 23})
panicErr(err)
var product Product
// find
_, err = brick.Find(&product)
panicErr(err)
// delete
_, err = brick.Delete(&product)
panicErr(err)
}評論
圖片
表情
