A simple SQL query builder and mapper. querybm works well with models generated by sqlc. But it works with your models without sqlc.
- No dependencies
- Build SELECT statement dynamically with struct type
- Mapping with generics instead of reflection
- 100% test coverage
See godoc for more details.
go get -u github.com/tecowl/querybm// You can use model generated by sqlc instead of defining your own
type Author struct {
AuthorID int32
Name string
}
type Condition struct {
Name string
}
func (c *Condition) Build(s *querybm.Statement) {
if c.Name != "" {
s.Where.Add(Field("name", LikeContains(c.Name)))
}
}
func New(db *sql.DB, condition *Condition) *querybm.Query[Author] {
return querybm.New(
db,
"authors",
querybm.NewFields(
[]string{"author_id", "name"},
func(rows querybm.Scanner, author *models.Author) error {
return rows.Scan(&author.AuthorID, &author.Name)
},
),
condition,
querybm.NewSortItem("name", false),
querybm.NewLimitOffset(100, 0),
)
}
func main() {
db, _ := sql.Open("..", "...")
defer db.Close()
condition := &Condition{Name: "John"}
q := New(db, condition)
cnt, _ := q.Count(ctx)
list, _ := q.List(ctx)
}- Simple Dynamic Query
- Query with enumerations
- Query with range
- Query with INNER JOIN
- Query with OUTER JOIN
- MySQL
- PostgreSQL
- SQLite3