Godex is a small sqlx-based query store for reusable table-level queries.
import godex "github.com/sphireinc/godex/v2"
db := sqlx.MustConnect("mysql", dsn)
q := godex.NewWithQueries(db, "posts", godex.DefaultQueries{
SelectById: "SELECT id, title, created_at FROM posts WHERE id = :id",
SelectOne: "SELECT id, title, created_at FROM posts WHERE id = :id AND title = :title",
Select: "SELECT id, title, created_at FROM posts WHERE created_at >= :created_after",
Insert: "INSERT INTO posts (title) VALUES (:title)",
Update: "UPDATE posts SET title = :title WHERE id = :id",
Delete: "DELETE FROM posts WHERE id = :id",
SoftDelete: "UPDATE posts SET deleted_at = CURRENT_TIMESTAMP WHERE id = :id",
}, map[string]string{
"SelectUsersByFirstName": "SELECT id, first_name FROM users WHERE first_name = :first_name",
})
type Post struct {
ID int `db:"id"`
Title string `db:"title"`
}
posts := godex.For[Post](q)post, err := posts.SelectOne(godex.Args{
"id": 154,
"title": "Hello World",
})
if err != nil {
panic(err)
}
fmt.Println(post.ID)recentPosts, err := posts.Select(godex.Args{
"created_after": time.Now().Add(-24 * time.Hour),
})
if err != nil {
panic(err)
}
fmt.Println(len(recentPosts))type User struct {
ID int `db:"id"`
FirstName string `db:"first_name"`
}
var users []User
err := q.QueryNamedInto("SelectUsersByFirstName", &users, godex.Args{
"first_name": "John",
})
if err != nil {
panic(err)
}id, err := q.InsertWith(struct {
Title string `db:"title"`
}{
Title: "Hello World",
})
if err != nil {
panic(err)
}
fmt.Println(id)- This module is
github.com/sphireinc/godex/v2. - Godex no longer depends on
mantis. - Queries can use either named parameters like
:idor positional placeholders like?. - Named parameters accept
godex.Args, plainmap[string]any, or structs withdbtags. - The preferred read API is the typed facade from
godex.For[T](...). - Legacy helpers such as
SelectOne()still exist for compatibility, but they are deprecated.
- Update imports from
github.com/sphireinc/godextogithub.com/sphireinc/godex/v2. - Replace Mantis-backed setup with
sqlx.DB. - Prefer
godex.For[T](...)and the*Into/*Withmethods over the deprecated legacy helpers.
