beego的model設(shè)計(jì)概述

2023-11-20 18:15 更新

模型(Models)- beego ORM

beego ORM 是一個(gè)強(qiáng)大的 Go 語言 ORM 框架。她的靈感主要來自 Django ORM 和 SQLAlchemy。

目前該框架仍處于開發(fā)階段,可能發(fā)生任何導(dǎo)致不兼容的改動(dòng)。

已支持?jǐn)?shù)據(jù)庫驅(qū)動(dòng):

以上數(shù)據(jù)庫驅(qū)動(dòng)均通過基本測試,但我們?nèi)孕枰姆答仭?/p>

ORM 特性:

  • 支持 Go 的所有類型存儲(chǔ)
  • 輕松上手,采用簡單的 CRUD 風(fēng)格
  • 自動(dòng) Join 關(guān)聯(lián)表
  • 跨數(shù)據(jù)庫兼容查詢
  • 允許直接使用 SQL 查詢/映射
  • 嚴(yán)格完整的測試保證 ORM 的穩(wěn)定與健壯

更多特性請(qǐng)?jiān)谖臋n中自行品讀。

安裝 ORM:

go get github.com/astaxie/beego/orm

修改日志

快速入門

 簡單示例

package main

import (
    "fmt"
    "github.com/astaxie/beego/orm"
    _ "github.com/go-sql-driver/mysql" // import your used driver
)

// Model Struct
type User struct {
    Id   int
    Name string `orm:"size(100)"`
}

func init() {
    // set default database
    orm.RegisterDataBase("default", "mysql", "username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8", 30)

    // register model
    orm.RegisterModel(new(User))

    // create table
    orm.RunSyncdb("default", false, true)
}

func main() {
    o := orm.NewOrm()

    user := User{Name: "slene"}

    // insert
    id, err := o.Insert(&user)
    fmt.Printf("ID: %d, ERR: %v\n", id, err)

    // update
    user.Name = "astaxie"
    num, err := o.Update(&user)
    fmt.Printf("NUM: %d, ERR: %v\n", num, err)

    // read one
    u := User{Id: user.Id}
    err = o.Read(&u)
    fmt.Printf("ERR: %v\n", err)

    // delete
    num, err = o.Delete(&u)
    fmt.Printf("NUM: %d, ERR: %v\n", num, err)
}

關(guān)聯(lián)查詢

type Post struct {
    Id    int    `orm:"auto"`
    Title string `orm:"size(100)"`
    User  *User  `orm:"rel(fk)"`
}

var posts []*Post
qs := o.QueryTable("post")
num, err := qs.Filter("User__Name", "slene").All(&posts)

SQL 查詢

當(dāng)您無法使用 ORM 來達(dá)到您的需求時(shí),也可以直接使用 SQL 來完成查詢/映射操作。

var maps []orm.Params
num, err := o.Raw("SELECT * FROM user").Values(&maps)
for _,term := range maps{
    fmt.Println(term["id"],":",term["name"])
}

事務(wù)處理

o.Begin()
...
user := User{Name: "slene"}
id, err := o.Insert(&user)
if err == nil {
    o.Commit()
} else {
    o.Rollback()
}

調(diào)試查詢?nèi)罩?/h3>

在開發(fā)環(huán)境下,您可以使用以下指令來開啟查詢調(diào)試模式:

func main() {
    orm.Debug = true
...

開啟后將會(huì)輸出所有查詢語句,包括執(zhí)行、準(zhǔn)備、事務(wù)等。

例如:

[ORM] - 2013-08-09 13:18:16 - [Queries/default] - [    db.Exec /     0.4ms] -     [INSERT INTO `user` (`name`) VALUES (?)] - `slene`
...

注意:我們不建議您在部署產(chǎn)品后這樣做。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)