lxzan / fi

动态 SQL 查询条件构造器

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

fi

动态 SQL 查询条件构造器

Build Status MIT licensed Go Version codecov Go Report Card

快速开始

  • 反射生成过滤器
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

About

动态 SQL 查询条件构造器

License:MIT License


Languages

Language:Go 99.2%Language:Makefile 0.8%