今回の成果物
sqlboiler は, golang における ORM で, データベースからのモデル自動生成機能付き
自動生成には接続設定用の toml ファイルを用意して, sqlboiler mysql
で以下のようなモデルが生成される。
type Author struct {
ID int `boil:"id" json:"id" toml:"id" yaml:"id"`
FirstName string `boil:"first_name" json:"first_name" toml:"first_name" yaml:"first_name"`
LastName string `boil:"last_name" json:"last_name" toml:"last_name" yaml:"last_name"`
Email string `boil:"email" json:"email" toml:"email" yaml:"email"`
Birthdate time.Time `boil:"birthdate" json:"birthdate" toml:"birthdate" yaml:"birthdate"`
Added time.Time `boil:"added" json:"added" toml:"added" yaml:"added"`
R *authorR `boil:"-" json:"-" toml:"-" yaml:"-"`
L authorL `boil:"-" json:"-" toml:"-" yaml:"-"`
}
このモデルには, Insert
やら Update
のメソッドが生えてたり, クエリビルダもあったりする。
INNER JOIN
にも対応していて便利なので紹介する。
何をやるにもダミーデータが必要なので用意する。
上記サイトからデフォルトで以下のようなテーブルが作れる
mysql> describe authors;
+------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| first_name | varchar(50) | NO | | NULL | |
| last_name | varchar(50) | NO | | NULL | |
| email | varchar(100) | NO | UNI | NULL | |
| birthdate | date | NO | | NULL | |
| added | timestamp | NO | | CURRENT_TIMESTAMP | |
+------------+--------------+------+-----+-------------------+----------------+
6 rows in set (0.00 sec)
mysql> describe posts;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| author_id | int(11) | NO | | NULL | |
| title | varchar(255) | NO | | NULL | |
| description | varchar(500) | NO | | NULL | |
| content | text | NO | | NULL | |
| date | date | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)
先ほど紹介した struct もこのテーブルから生成されたもの。
これを使って, inner join 実装を行うとこんなん。