Beego-ORM使用

本打算用官方包里自带的mysql来进行数据库操作的,但为了与rpc项目统一,最后选择了Beego的ORM。看了几遍文档,这里进行一下常用功能的总结。

ORM基础配置

package main

import (
"fmt"
"github.com/astaxie/beego/orm"
// 必须引入mysql包
_ "github.com/go-sql-driver/mysql"
)

type User struct {
Id int
Age int16
Name string
}

func init() {
orm.RegisterDriver("mysql", orm.DRMySQL)
// 需要在init中注册定义的model
orm.RegisterModel(new(User))
// 链接数据库
orm.RegisterDataBase("default", "mysql", "root:root@tcp(123.123.123.123:3306)/test?charset=utf8")
}

对象的 CRUD 操作

  1. Read
o := orm.NewOrm()
user := User{Id: 1}

err := o.Read(&user)

if err == orm.ErrNoRows {
fmt.Println("查询不到")
} else if err == orm.ErrMissPK {
fmt.Println("找不到主键")
} else {
fmt.Println(user.Id, user.Name)
}

主要的逻辑就是将一个models的结构体传入o.Read()然后返回查询到完整的一条记录。

  1. ReadOrCreate
o := orm.NewOrm()
user := User{Name: "slene"}
// 三个返回参数依次为:是否新创建的,对象 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)
}
}

字面意思:读取,不存在就创建

  1. Insert
o := orm.NewOrm()
var user User
user.Name = "slene"
user.IsActive = true

id, err := o.Insert(&user)
if err == nil {
fmt.Println(id)
}

这个也简单,将一条数据新增到数据库,返回值为自增ID

  1. InsertMulti
users := []User{
{Name: "slene"},
{Name: "astaxie"},
{Name: "unknown"},
...
}
successNums, err := o.InsertMulti(100, users)

传入的是models结构体的数组,第一个返回值为成功插入的数据量

  1. Update
o := orm.NewOrm()
user := User{Id: 1}
if o.Read(&user) == nil {
user.Name = "MyName"
if num, err := o.Update(&user); err == nil {
fmt.Println(num)
}
}

第一个返回值为影响的行数

  1. Delete
o := orm.NewOrm()
if num, err := o.Delete(&User{Id: 1}); err == nil {
fmt.Println(num)
}

第一个返回值为影响的行数

SQL语句查询

o := orm.NewOrm()
var r RawSeter

ids := []int{1, 2, 3}
r = o.Raw("SELECT name FROM user WHERE id IN (?, ?, ?)", ids)

*注:“?”为占用符

而RawSeter下面有许多方法,用来解析返回的值,这些还没有用到,等以后进行补充。

To be continued!!!