入社1年目の渡邉です。
最近学んだオブジェクト関係マッピング(ORM:Object-relational mapping)が、
すげぇ分かりやすいって時代遅れながら書かせて頂きます。
いつの時代も新しいことを考える人は凄いなと思います(笑)
最近はGo言語をよく書いてるので、Go言語でORを触れるgormを使います。
SQL文を意識した場合
CREATE TABLE users (
age INTEGER,
name TEXT
);
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ファイルの中身
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