LoginSignup
47
34

More than 5 years have passed since last update.

Go言語のGORMを使ってみた①

Last updated at Posted at 2017-08-10

はじめ

仕事でGORMを使うことになったので、学習目的で記事を書いていくので、
アドバイスがあると大変助かりますm(_ _)m

GORMについて

GO言語用のORMフレームワーク。
DB周りの処理を実装する時にこのフレームワークを使うと便利。

公式サイト
http://jinzhu.me/gorm/

ORMについて
こちらの記事わかりやすいので、
わからない方は軽く覗いてみて下さい〜

必要なもの

1.必要最低限のSQLをかける(SELECT,CREATE,INSERT,UPDATE,DELETE,DROP)
2.Go言語を公式ドキュメントを読みながら実装できる(ポインタ、複数戻り値、型宣言など)
3.気合と根性(いらないかも)

準備

sample.go
import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

importでGORMと使用するDBのドライバをインポート。

テーブル定義

sample.go
type User struct {
    gorm.Model
    Name string `gorm:"size:255"`
    Password string `gorm:"size:255"`
    Email string `gorm:"size:255"`
}

ここで、一つ注意点として,
構造体でカラムを定義する時、変数名は先頭が大文字でなければ行けない。(じゃないとカラムが作成されない)
ここ躓いたので、要注意!!!!

DB接続

db, err := gorm.Open("mysql", "root@/sample?charset=utf8&parseTime=True&loc=Local")
if err != nil {
    panic("failed to connect database")
}

// 実行完了後DB接続を閉じる
defer db.Close() 

// ログ出力を有効にする
db.LogMode(true) 

テーブル生成

マイグレーションを実行すると
テーブルが無い時は自動生成
あるときはなにもしない

sample.go
// DBエンジンを「InnoDB」に設定
db.Set("gorm:table_options", "ENGINE=InnoDB")

// マイグレーション
db.AutoMigrate(&User{})

}

自動生成されるテーブルは以下


+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
| deleted_at | timestamp        | YES  | MUL | NULL    |                |
| name       | varchar(255)     | YES  |     | NULL    |                |
| password   | varchar(255)     | YES  |     | NULL    |                |
| email      | varchar(255)     | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

insert

// 実データを定義
user := User{Name: "sknaehira", Password: "skanehira", Email:"skanehira@sample.com"}

// insert処理
db.NewRecord(&user);
db.Create(&user);

select

db.Find(&user) // 1レコード
db.Find([]&user) // 全レコード

where句

db.Where("name = ?", "skanehira").First(&user)

めんどくさくなってきたので、
あとは公式サイトを参照してくだいさいー

47
34
1

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
47
34