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工具,处理数据库非常简单。
虽然需要另外准备迁移文件,但如果数据库模式已经存在,它似乎会展现出它的实力。

广告
将在 10 秒后关闭
bannerAds