sqlxの使いかたを把握するための情報のメモ
sqlxの資料のメモ
色々探すのが面倒なのでここにメモしておく。
後者は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 を取り出す例