Your Question

因为在开发过程中,使用where需要以字符串的形式去拼接sql。不是很方便。我自己写了querybuild 用来在调用where 的时候使用。

package querybuild

import (
    "fmt"
)

func NotIn(field string, list any) (string, any) {
    return fmt.Sprintf(`%v not in ?`, field), list
}

func In(field string, list any) (string, any) {
    return fmt.Sprintf(`%v in ?`, field), list
}

func Gt(field, value any) (string, any) {
    return fmt.Sprintf(`%v > ?`, field), value
}

func Ge(field, value any) (string, any) {
    return fmt.Sprintf(`%v >= ?`, field), value
}

func Lt(field, value any) (string, any) {
    return fmt.Sprintf(`%v < ?`, field), value
}

func Le(field, value any) (string, any) {
    return fmt.Sprintf(`%v <= ?`, field), value
}

func Eq(field, value any) (string, any) {
    return fmt.Sprintf(`%v = ?`, field), value
}

func Like(field, value string) (string, string) {
    return fmt.Sprintf(`%v = ?`, field), fmt.Sprintf(`%%%v%%`, value)
}

func LeftLike(field, value string) (string, string) {
    return fmt.Sprintf(`%v = ?`, field), fmt.Sprintf(`%%%v`, value)
}

func RightLike(field, value string) (string, string) {
    return fmt.Sprintf(`%v = ?`, field), fmt.Sprintf(`%v%%`, value)
}

func Ne(field, value any) (string, any) {
    return fmt.Sprintf(`%v <> ?`, field), value
}

func IsNull(field string) string {
    return fmt.Sprintf(`%v IS NULL`, field)
}

func IsNotNull(field string) string {
    return fmt.Sprintf(`%v IS NOT NULL`, field)
}

因为这是额外包里写的,会导致会出现许多重复的代码。

Gorm 关于查询构建器的之后是否会扩展更多类型,补充 in / not in / eq / ge 等,而非仅仅只有目前的where or 等搜索?

希望 gorm 本身可以支持这种更丰富的查询构造器。

builder().Eq(xxx,xxx).In(xxx,xxx).NotNull(xxx,xxx).First(&entity)

Comment From: li-jin-gou

欢迎使用 gen @thh9 https://github.com/go-gorm/gen