动态 SQL 查询条件构造器
package main
import (
"fmt"
"github.com/lxzan/fi"
)
type Template struct {
Name string `fi:"cmp=like"`
Age int `fi:"cmp=lte"`
Height int
}
func main() {
var v = &Template{
Name: "caster",
Age: 18,
}
var filter = fi.GetFilter(v)
fmt.Printf("%s %v\n", filter.GetExpression(), filter.Args)
}
// `name` LIKE ? AND `age` <= ? [%caster% 18]
package main
import (
"fmt"
"github.com/lxzan/fi"
)
type Template struct {
Name string `fi:"cmp=like"`
Age int `fi:"cmp=lte"`
Height int
}
func main() {
var v = &Template{
Name: "caster",
Age: 18,
}
var filter = fi.
NewFilter().
Like("name", v.Name).
Lte("age", v.Age).
Eq("height", v.Height)
fmt.Printf("%s %v\n", filter.GetExpression(), filter.Args)
}
// `name` LIKE ? AND `age` <= ? [%caster% 18]
字段 |
描述 |
column |
自定义字段名; 默认值是下划线风格 |
cmp |
比较操作符; 默认值是eq |
- |
忽略 |
操作符 |
描述 |
eq |
= |
not_eq |
!= |
gt |
> |
lt |
< |
gte |
>= |
lte |
<= |
like |
LIKE |
not_like |
NOT LIKE |
in |
IN |
not_in |
NOT IN |
go test -benchmem -run=^$ -bench ^Benchmark github.com/lxzan/fi
goos: windows
goarch: amd64
pkg: github.com/lxzan/fi
cpu: 13th Gen Intel(R) Core(TM) i5-1340P
BenchmarkGetFilterReflect-16 487071 2249 ns/op 768 B/op 29 allocs/op
BenchmarkGetFilterNoReflect-16 2214118 569.0 ns/op 558 B/op 11 allocs/op
PASS
ok github.com/lxzan/fi 3.318s