beego ORM 對象基本操作

操作的四個方法 Read / Insert / Update / Delete
mysql數據庫,設計表的結構
創建名爲Person的數據庫,創建user表,字段設計如下
mysql> create database Person CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> use Person

mysql> CREATE TABLE user(
    id int not null auto_increment,
    Name char(50),
    Pwd char(50),
    Email char(50),
    Sex char(50),
    Phone char(50),
    primary key (id)
    );
 
models 主要是負責數據庫處理
# models目錄下面 user.go
package models

import (
    "github.com/astaxie/beego/orm"
)

// 用戶信息
// 默認情況對應數據庫的表名爲:user
type User struct {
    Id    int64
    Name    string
    Pwd    string
    Email    string
    Sex    string
    Phone    string
}

func init() {
    // 需要在init中註冊定義的model
    // orm.RegisterModel(new(User), new(Post), new(Profile), new(Tag))
    orm.RegisterModel(new(User))
}

 
main.go 負責在運行時連接數據庫根據模型創建數據庫表

package main

import (
    "mysite/models"
    "fmt"
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/orm"
    _ "github.com/go-sql-driver/mysql"

)

func init() {
    mysqlhost := beego.AppConfig.String("mysqlhost")
    mysqlport := beego.AppConfig.String("mysqlport")
    mysqluser := beego.AppConfig.String("mysqluser")
    mysqlpass := beego.AppConfig.String("mysqlpass")
    mysqldb := beego.AppConfig.String("mysqldb")
    
    //註冊mysql Driver
    orm.RegisterDriver("mysql", orm.DRMySQL)
    //註冊數據庫直接連接
    // orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8")
    
     //用戶名:密碼@tcp(url地址)/數據庫 ,名字對應app.conf配置數據庫信息
    conn := mysqluser + ":" + mysqlpass + "@tcp(" + mysqlhost + ":" + mysqlport + ")/" + mysqldb + "?charset=utf8"
    //註冊數據庫連接
    orm.RegisterDataBase("default", "mysql", conn)
 
    fmt.Printf("數據庫連接成功!%s\n", conn)
}
func main() {
    // 插入數據
    o := orm.NewOrm()
    u := models.User{Name:"Victor", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"}
    id, err := o.Insert(&u)
    fmt.Printf("ID: %d, ERR: %v\n", id, err)
        
    beego.Run()
    orm.Debug= true
    beego.Run()
}
 
Insert
func main() {

    orm.Debug= true
    // 插入數據
    o := orm.NewOrm()
    u := models.User{Name:"Victor", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"}
    id, err := o.Insert(&u)
    fmt.Printf("ID: %d, ERR: %v\n", id, err)
        
    beego.Run()
}

 
Read
func main() {

    orm.Debug= true

    o := orm.NewOrm()
    // 讀取數據
    user := models.User{Id: 4}
    err := o.Read(&user)
    if err != nil {
        fmt.Printf("ERR: %v\n", err)
    }else {
        fmt.Println(user.Id, user.Name, user.Email )
    }
    beego.Run()
}

 
ReadOrCreate
嘗試從數據庫讀取,不存在的話就創建一個

默認必須傳入一個參數作爲條件字段,同時也支持多個參數多個條件字段

func main() {

    orm.Debug= true

    o := orm.NewOrm()
    // 嘗試從數據庫讀取,不存在的話就創建一個
    user := models.User{Name:"AI", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"}
    // 三個返回參數依次爲:是否新創建的,對象 Id 值,錯誤
    if created, id, err := o.ReadOrCreate(&user, "Name"); err == nil {
        if created {
            fmt.Println("New Insert an object. Id:", id)
        } else {
            fmt.Println("Get an object. Id:", id)
        }
    }

    beego.Run()
}
 
InsertMulti
同時插入多個對象
類似sql語句
insert into table (name, age) values(“slene”, 28),(“astaxie”, 30),(“unknown”, 20)

func main() {
    orm.Debug= true
    o := orm.NewOrm()
    // 同時插入多個對象
    users := []models.User{
        {Name:"qwe", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"},
        {Name:"asd", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"},
    }
    // 第一個參數 bulk 爲並列插入的數量,bulk 爲 1 時,將會順序插入 slice 中的數據
    successNums, err := o.InsertMulti(100, users)

    fmt.Printf("successNums: %d, ERR: %v\n", successNums, err)
    beego.Run()
}
 
Update
第一個返回值爲影響的行數

func main() {
    orm.Debug= true
    o := orm.NewOrm()
    // Update 默認更新所有的字段,可以更新指定的字段
    user := models.User{Id: 4}
    user.Name = "my"
    num, err := o.Update(&user)
    // 只更新 Name
    // o.Update(&user, "Name")
    // 指定多個字段
    // o.Update(&user, "Field1", "Field2", ...)
    fmt.Printf("successNums: %d, ERR: %v\n", num, err)
    beego.Run()    
}
 
Delete
第一個返回值爲影響的行數

func main() {
    orm.Debug= true
    o := orm.NewOrm()
    // Delete
    if num, err := o.Delete(&models.User{Id: 1}); err == nil {
        fmt.Println(num)
    }
    beego.Run()
}
--------------------- 
作者:斷了的軍刀 
來源:CSDN 
原文:https://blog.csdn.net/u011327801/article/details/90180942 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章