今回の成果物

somen440/zatsu

sqlboiler は, golang における ORM で, データベースからのモデル自動生成機能付き

volatiletech/sqlboiler

自動生成には接続設定用の 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 実装を行うとこんなん。