1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

オブジェクト関係マッピング(gormを使ってみた)

Last updated at Posted at 2019-09-27

入社1年目の渡邉です。

最近学んだオブジェクト関係マッピング(ORM:Object-relational mapping)が、
すげぇ分かりやすいって時代遅れながら書かせて頂きます。

いつの時代も新しいことを考える人は凄いなと思います(笑)

最近はGo言語をよく書いてるので、Go言語でORを触れるgormを使います。

SQL文を意識した場合

DDL.sql
CREATE TABLE users (
    age         INTEGER,
    name        TEXT
);
db.go
import (
	"database/sql"
	"go/build"
	"io/ioutil"
	"strings"
)

func CreateTable(db *sql.DB) {
	execFile(db, "./DDL.sql")
}

func execFile(db *sql.DB, path string) {
	statements, _ := ioutil.ReadFile(build.Default.GOPATH + path)
	for _, statement := range strings.Split(string(statements), ";\n") {
		_, err := db.Exec(statement)
		if err != nil {
			panic(err.Error())
		}
	}
}

Tableを新規に作成したいところで CreateTable() を実行するようにします。

※DDL: https://wa3.i-3-i.info/word15639.html

ORMの場合

gorm を入れておきましょう

$ go get github.com/jinzhu/gorm

dbファイルの中身

db.go

import (
	"time"

	"github.com/jinzhu/gorm"
)

type Users struct {
	age  int
	name string
}

func CreateTable(db *gorm.DB) {
	db.CreateTable(&Users{})
}

Tableを新規に作成したいところで CreateTable() を実行するようにします。
個人的には直感かつ短いコードで書けて分かりやすい。

#感想
gorm、めっちゃ分かりやすいなと使い方を知ってから思います。

・ORMを使うのか?
・SQL文を扱うのか?

メリット・デメリットに関してはまだまだ詰めきれてませんが、使っていって学びを深めようと思います。

#関連記事
【GORM】Go言語でORM触ってみた(2019/09/05更新)
https://qiita.com/chan-p/items/cf3e007b82cc7fce2d81

GORMというORMが超絶便利だった件
https://medium.com/@taka.abc.hiko/gorm%E3%81%A8%E3%81%84%E3%81%86orm%E3%81%8C%E8%B6%85%E7%B5%B6%E4%BE%BF%E5%88%A9%E3%81%A0%E3%81%A3%E3%81%9F%E4%BB%B6-8d279489c38f

#諸説あり
O/Rマッピングは百害あって一利なし!(2018年11月17日に更新)
https://qiita.com/gomiryo/items/6d448c500749f91242d2

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?