condition(数据库条件查询)
小于 1 分钟
- 与 jzero 生成的 model 代码搭配使用
- 一套代码适配 mysql/postgres/sqlite
- 支持链式调用
Select
condition
package main
import (
"fmt"
"github.com/huandu/go-sqlbuilder"
"github.com/jzero-io/jzero/core/stores/condition"
)
func main() {
conditions := condition.New(condition.Condition{
// 操作的字段
Field: "name",
// 操作
Operator: condition.Equal,
// 字段的值
Value: "jzero",
// ValueFunc 优先级比 Skip 高
ValueFunc: func() any {
return "jzero"
},
// 是否跳过该条件
Skip: false,
// SkipFunc 优先级比 Skip 高
SkipFunc: func() bool {
return false
},
})
// 默认 flavor 为 mysql
statement, args := condition.BuildSelect(*sqlbuilder.Select("*").From("user"), conditions...)
fmt.Println(statement, args)
// 使用特定 flavor
statement, args = condition.BuildSelectWithFlavor(sqlbuilder.PostgreSQL, *sqlbuilder.Select("*").From("user"), conditions...)
fmt.Println(statement, args)
}condition chain
package main
import (
"fmt"
"github.com/huandu/go-sqlbuilder"
"github.com/jzero-io/jzero/core/stores/condition"
)
func main() {
chain := condition.NewChain().Equal("name", "jzero",
condition.WithValueFunc(func() any {
return "jzero"
}),
condition.WithSkip(false),
condition.WithSkipFunc(
func() bool {
return false
}),
)
statement, args := condition.BuildSelect(*sqlbuilder.Select("*").From("user"), chain.Build()...)
fmt.Println(statement, args)
// 使用特定 flavor
statement, args = condition.BuildSelectWithFlavor(sqlbuilder.PostgreSQL, *sqlbuilder.Select("*").From("user"), chain.Build()...)
fmt.Println(statement, args)
}