dbx Getting Started
Getting Started
This guide shows a complete, runnable dbx example from schema definition to query execution.
1) Install Dependencies
go get github.com/DaiYuANg/arcgo/dbx
go get github.com/DaiYuANg/arcgo/dbx/dialect/sqlite
go get github.com/mattn/go-sqlite32) Create main.go
package main
import (
"context"
"database/sql"
"fmt"
"log"
"github.com/DaiYuANg/arcgo/dbx"
"github.com/DaiYuANg/arcgo/dbx/dialect/sqlite"
_ "github.com/mattn/go-sqlite3"
)
type User struct {
ID int64 `dbx:"id"`
Username string `dbx:"username"`
Email string `dbx:"email"`
Status int `dbx:"status"`
}
type UserSchema struct {
dbx.Schema[User]
ID dbx.IDColumn[User, int64, dbx.IDSnowflake] `dbx:"id,pk"`
Username dbx.Column[User, string] `dbx:"username,index"`
Email dbx.Column[User, string] `dbx:"email,unique"`
Status dbx.Column[User, int] `dbx:"status,default=1,index"`
}
var Users = dbx.MustSchema("users", UserSchema{})
func main() {
ctx := context.Background()
raw, err := sql.Open("sqlite3", "file:dbx_getting_started.db?cache=shared")
if err != nil {
log.Fatal(err)
}
defer raw.Close()
core, err := dbx.NewWithOptions(
raw,
sqlite.New(),
dbx.WithDebug(true),
)
if err != nil {
log.Fatal(err)
}
// Create/align table structure based on schema metadata.
if err := core.AutoMigrate(ctx, Users); err != nil {
log.Fatal(err)
}
mapper := dbx.MustMapper[User](Users)
alice := &User{
Username: "alice",
Email: "alice@example.com",
Status: 1,
}
assignments, err := mapper.InsertAssignments(core, Users, alice)
if err != nil {
log.Fatal(err)
}
if _, err := dbx.Exec(ctx, core, dbx.InsertInto(Users).Values(assignments...)); err != nil {
log.Fatal(err)
}
items, err := dbx.QueryAll(
ctx,
core,
dbx.Select(Users.AllColumns()...).From(Users).Where(Users.Status.Eq(1)),
mapper,
)
if err != nil {
log.Fatal(err)
}
fmt.Printf("active users: %d\n", len(items))
for _, item := range items {
fmt.Printf("id=%d username=%s email=%s status=%d\n", item.ID, item.Username, item.Email, item.Status)
}
}3) Run
go run .Next Steps
- ID strategy and production guidance: ID Generation
- Runtime options: Options
- Logging and hooks: Observability
- Full runnable examples: Examples