BeegoのORマッパー
- 準備
データベース構造のモデルを用意 - SELECT
- INSERT
- UPDATE
- InsertOrUpdate
- DELETE
1. 準備
- Userテーブル
ID | NAME |
---|---|
1 | 鈴木 |
2 | 佐藤 |
- Profileテーブル
ID | Age | User |
---|---|---|
1 | 鈴木 | 1 |
2 | 佐藤 | 2 |
model.go
package main
import (
"github.com/astaxie/beego/orm"
)
type User struct {
Id int
Name string
}
type Profile struct {
Id int
Age int16
User *User `orm:"reverse(one)"` // Reverse relationship (optional)
}
Delete(interface{}) (int64, error)
LoadRelated(interface{}, string, …interface{}) (int64, error)
QueryM2M(interface{}, string) QueryM2Mer
QueryTable(interface{}) QuerySeter
Using(string) error
Begin() error
Commit() error
Rollback() error
Raw(string, …interface{}) RawSeter
Driver() Driver
}
- BeegoではQueryTableを使用してDBを操作するQuerySeterを作成する。
- QueryTableの引数は「”テーブル名”」または「モデルをNewしたもの」
o := orm.NewOrm()
// テーブル名直打ち
qs := o.QueryTable("user")
- // モデル(Struct)を使った場合
user := new(User)
qs = o.QueryTable(user) // return a QuerySeter
2. SELECT
sample.go
// すべてのデータの場合
o := NewOrm()
var users []User
o.QueryTable("user").Filter("Id", 1).All(&users, "Id", "Name")
// 単一データの場合
var users []User
o.QueryTable("user").Filter("Id", 1).All(&users, "Id", "Name")
- Filterは条件
- QueryTableはテーブル名(モデルも使える)
3. Insert
- 単一行のINSERTの場合
はじめに各ORMの関数一覧と戻り値の型の確認
Insert(interface{}) (int64, error)
InsertMulti(int, interface{}) (int64, error)
sample.go
o := orm.NewOrm()
var user User
user.Name = "谷岡"
id, err := o.Insert(&user) //戻り値のIdはint64
if err == nil {
fmt.Println(id)
}
- 複数行のINSERTの場合
sample.go
o := NewOrm()
users := []User{
{Name: "slene"},
{Name: "astaxie"},
{Name: "unknown"},
...
}
successNums, err := o.InsertMulti(len(users), users)
4.UPDATE
はじめに各ORMの関数一覧と戻り値の型の確認
Update(interface{}, …string) (int64, error)
o := orm.NewOrm()
user := User{Id: 1}
if o.Read(&user) == nil {
user.Name = "MyName"
//戻り値のnumはint64
if num, err := o.Update(&user); err == nil {
fmt.Println(num)
}
}
##5 Insert or Update
sample.go
o := NewOrm()
var user User
user.id = "1"
user.Name = "鈴木さん"
r, e := o.InsertOrUpdate(user) //モデルの値によって主キーを検索し、存在すれば更新、存在しなければ挿入処理を行う。
r, e := o.InsertOrUpdate(user, "name=鈴木君") //modelにない値の指定は第二引数で行う
InsertOrUpdate()
を使用する場合注意点があり、structのormの記述にautoを入れると全て新規レコードとしてinsertされてしまいます。
models.go
type Shikaku struct {
// pkにautoは必要なし
Shikaku_id int64 `orm:"pk"` //ここにautoを設定しては行けない
Shikaku_name string `json:"shikakuName"`
6.DELETE
はじめに各ORMの関数一覧と戻り値の型の確認
Delete(interface{}) (int64, error)
o := NewOrm()
//戻り値のnumはint64
o.Delete(&User{Id: 1}) //userテーブルのIDが1のレコードを削除
生のSQLを書く方法
直接クエリを書く場合
sample01.go
o := NewOrm()
var r orm.RawSeter
r = o.Raw("select user WHERE name = ?", "佐藤")
// r {[id:2, name:佐藤]} |
別途まとめました
BeegoのORMの使い方(RAWで生のSQLを書く)