sqlxの使いかたを把握するための情報のメモ

sqlxの資料のメモ

github.com

色々探すのが面倒なのでここにメモしておく。

後者はcontextの対応が含まれていないコードなので少し古いかもしれない。

はじめの一歩

実際にsqlxの動作を確認するには、とりあえずsqlite3を利用して試すのが手軽だと想う。インメモリーデータベースが使えるので。

先ほど紹介したユーザーガイドでもsqlite3を使っている。

接続確認

接続を試すには以下の様なコードを書いておけばが良い。

00ping/main.go

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/jmoiron/sqlx"
    _ "github.com/mattn/go-sqlite3"
)

func main() {
    ctx := context.Background()
    db, err := sqlx.ConnectContext(ctx, "sqlite3", ":memory:")
    if err != nil {
        log.Fatalf("!!%+v", err)
    }
    fmt.Println("@", db.Ping())
}

あとはREADMEの部分とドキュメントを見てやっていく感じで。

テストコードも見ると良さそう。

Below is an example which shows some common use cases for sqlx. Check sqlx_test.go for more usage.

とりあえず把握しておくべきこと

とりあえず把握しておくべきことは以下のようなは感じ?

  • なるべくcontextを受け取る系の関数を使っていきましょう
  • prepared statement使いましょう
  • write系はとりあえずExec(), テストとかのときにはMustExec()とか使って良い
  • read系はfind oneはGet(), find allはSelect()

くらいで良さそう。

その他参考になるもの

はてなの2018のサマーインターン(?)のコードが参考になりそう。

depなので少し古いけれどそこはgo modulesに置き換えてやっていけば良さそう。

基本的にmodelにstructを定義してrepositoryでqueryを実行している(read, writeどちらもrepository)。その他confなどの読み込みからmainをつなぐ部分まで大まかにパクると便利そうという感じ。

graphqlやdataloader関連のところは最初は無視してあとで学べば良いと思う。

あと幾つか見つけた情報

driverの接続方法はこの辺り

joinをしたときのstructのbindの例。

inを使うコードの例

select exists を使うhelperの例

last insertId を取り出す例

https://github.com/jmoiron/sqlx/issues/154