SQLBoiler的使用方法
SQLBoiler 是一个用于生成类型安全 SQL 查询和更新代码的 ORM(对象关系映射)库。
第九天的圣诞节日历谈论的是关于sqlboiler。
sqlboiler是Go语言中的ORM框架。
在Go语言中,有一些ORM库,如GORM和sqlx,但sqlboiler的特点是数据库优先。
安装
go install github.com/volatiletech/sqlboiler/v4@latest
go install github.com/volatiletech/sqlboiler/v4/drivers/sqlboiler-mysql@latest
SQLBoiler的配置文件
这里使用的值是基于最近在Advent Calendar Go中处理sql的内容。
[mysql]
dbname="golang"
host="mysql"
port=3306
user="golang"
pass="golang"
sslmode="false"
模型生成
sqlboiler mysql
我来看一下生成的文件。
root@8f93343dfdb9:/app# ls models
boil_main_test.go boil_suites_test.go boil_view_names.go mysql_upsert.go
boil_queries.go boil_table_names.go mysql_main_test.go users.go
boil_queries_test.go boil_types.go mysql_suites_test.go users_test.go
程式主體
package main
import (
"context"
"database/sql"
"fmt"
"log"
"github.com/shuyaeer/learn-go/models"
_ "github.com/go-sql-driver/mysql"
"github.com/volatiletech/sqlboiler/boil"
)
func main() {
// データベースへの接続設定
db, err := sql.Open("mysql", "golang:golang@tcp(mysql:3306)/golang?parseTime=true")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// データベース接続のテスト
if err = db.Ping(); err != nil {
log.Fatal(err)
}
// sqlboiler用の設定
boil.SetDB(db)
// usersテーブルから全ユーザーを取得
users, err := models.Users().All(context.Background(), db)
if err != nil {
log.Fatal(err)
}
// 取得したユーザー情報を表示
for _, user := range users {
fmt.Printf("User: %+v\n", user)
}
}
进行
root@8f93343dfdb9:/app# go run app/day9/main.go
User: &{ID:1 Username:test Password:test Email:{String:test Valid:true} CreatedAt:2023-12-07 14:06:11 +0000 UTC R:<nil> L:{}}
User: &{ID:2 Username:test Password:test Email:{String:test Valid:true} CreatedAt:2023-12-07 14:06:22 +0000 UTC R:<nil> L:{}}
User: &{ID:3 Username:test Password:test Email:{String:test Valid:true} CreatedAt:2023-12-07 14:06:22 +0000 UTC R:<nil> L:{}}
看起来不错。
作为一个ORM工具,处理数据库非常简单。
虽然需要另外准备迁移文件,但如果数据库模式已经存在,它似乎会展现出它的实力。