LoginSignup
1
1

More than 3 years have passed since last update.

【Go言語のフレームワークBeego】ORMの使い方

Last updated at Posted at 2019-04-24

BeegoのORマッパー

  1. 準備
    データベース構造のモデルを用意
  2. SELECT
  3. INSERT
  4. UPDATE
  5. InsertOrUpdate
  6. 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を書く)

URL:DMLの使い方(公式)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1