Documentation
¶
Index ¶
- Constants
- func CamelToSnake(str string) string
- func CamelsToSnakes(fields []string) (result []string)
- func JsonString(data interface{}) string
- func SnakeToCamel(s string) string
- func String(s string) string
- func StringSliceDiff(source, exclude []string) []string
- func StructExportedFields(obj interface{}) (fields []string)
- func StructValues(data interface{}, fields []string) string
- func ToString(i interface{}) string
- type Builder
- func (b *Builder) Alias(alias string) *Builder
- func (b *Builder) Any(dbField string, values interface{}) *Builder
- func (b *Builder) Between(dbField string, start, end interface{}) *Builder
- func (b *Builder) Build() string
- func (b *Builder) BuildCount() string
- func (b *Builder) Clear()
- func (b *Builder) Clone() *Builder
- func (b *Builder) Cols(cols ...string) *Builder
- func (b *Builder) Delete(table string) *Builder
- func (b *Builder) Equal(dbField string, value interface{}) *Builder
- func (b *Builder) Fields(fields ...string) *Builder
- func (b *Builder) ForUpdate() *Builder
- func (b *Builder) GroupBy(group ...string) *Builder
- func (b *Builder) Having(having string) *Builder
- func (b *Builder) In(dbField string, values interface{}) *Builder
- func (b *Builder) InnerJoin(table, as, on string) *Builder
- func (b *Builder) Insert(table string) *Builder
- func (b *Builder) Join(joinType, table, as, on string) *Builder
- func (b *Builder) LeftJoin(table, as, on string) *Builder
- func (b *Builder) Like(dbField, value string) *Builder
- func (b *Builder) Limit(limit int64) *Builder
- func (b *Builder) MultiLike(dbFields []string, value string) *Builder
- func (b *Builder) NotIn(dbField string, values interface{}) *Builder
- func (b *Builder) Offset(offset int64) *Builder
- func (b *Builder) OnConflict(fields string, do string) *Builder
- func (b *Builder) OnConflictDoNothing() *Builder
- func (b *Builder) Or(strs ...string) *Builder
- func (b *Builder) OrderBy(order ...string) *Builder
- func (b *Builder) Returning(fields ...string) *Builder
- func (b *Builder) RightJoin(table, as, on string) *Builder
- func (b *Builder) Select(table string) *Builder
- func (b *Builder) SelectSubQuery(subQuery string) *Builder
- func (b *Builder) Set(data ...string) *Builder
- func (b *Builder) SetMap(data map[string]interface{}) *Builder
- func (b *Builder) SetStruct(data interface{}) *Builder
- func (b *Builder) Strategies(strategies ...Strategy) *Builder
- func (b *Builder) StrategyFuncs(strategyFuncs ...StrategyFunc) *Builder
- func (b *Builder) TryAny(dbField string, values interface{}) *Builder
- func (b *Builder) TryDateRange(dbField string, startDate, endDate time.Time) *Builder
- func (b *Builder) TryEqual(dbField string, value interface{}) *Builder
- func (b *Builder) TryIn(dbField string, values interface{}) *Builder
- func (b *Builder) TryLike(dbField string, value string) *Builder
- func (b *Builder) TryMap(where map[string]interface{}) *Builder
- func (b *Builder) TryMultiLike(dbFields []string, value string) *Builder
- func (b *Builder) TryTimeRange(dbField string, startTime, endTime time.Time) *Builder
- func (b *Builder) Update(table string) *Builder
- func (b *Builder) Values(values interface{}) *Builder
- func (b *Builder) Where(strs ...string) *Builder
- func (b *Builder) WhereMap(where map[string]interface{}) *Builder
- type ConditionBuilder
- func (b *ConditionBuilder) Any(dbField string, values interface{}) *ConditionBuilder
- func (b *ConditionBuilder) Between(dbField string, start, end interface{}) *ConditionBuilder
- func (b *ConditionBuilder) Build() string
- func (b *ConditionBuilder) Clear()
- func (b *ConditionBuilder) Equal(dbField string, value interface{}) *ConditionBuilder
- func (b *ConditionBuilder) In(dbField string, values interface{}) *ConditionBuilder
- func (b *ConditionBuilder) Like(dbField, value string) *ConditionBuilder
- func (b *ConditionBuilder) MultiLike(dbFields []string, value string) *ConditionBuilder
- func (b *ConditionBuilder) NotIn(dbField string, values interface{}) *ConditionBuilder
- func (b *ConditionBuilder) Or(strs ...string) *ConditionBuilder
- func (b *ConditionBuilder) TryAny(dbField string, values interface{}) *ConditionBuilder
- func (b *ConditionBuilder) TryDateRange(dbField string, startDate, endDate time.Time) *ConditionBuilder
- func (b *ConditionBuilder) TryEqual(dbField string, value interface{}) *ConditionBuilder
- func (b *ConditionBuilder) TryIn(dbField string, values interface{}) *ConditionBuilder
- func (b *ConditionBuilder) TryLike(dbField string, value string) *ConditionBuilder
- func (b *ConditionBuilder) TryMap(where map[string]interface{}) *ConditionBuilder
- func (b *ConditionBuilder) TryMultiLike(dbFields []string, value string) *ConditionBuilder
- func (b *ConditionBuilder) TryTimeRange(dbField string, startTime, endTime time.Time) *ConditionBuilder
- func (b *ConditionBuilder) Where(strs ...string) *ConditionBuilder
- func (b *ConditionBuilder) WhereMap(where map[string]interface{}) *ConditionBuilder
- type Strategy
- type StrategyFunc
- type TryDateRange
- type TryEqual
- type TryIn
- type TryLike
- type TryMultiLike
- type TryTimeRange
Examples ¶
Constants ¶
View Source
const ( TimeLayout = "2006-01-02 15:04:05" DateLayout = "2006-01-02" )
Variables ¶
This section is empty.
Functions ¶
func CamelToSnake ¶
func CamelsToSnakes ¶
func JsonString ¶
func JsonString(data interface{}) string
func SnakeToCamel ¶
func String ¶
For more details,refer to 4.1.2.1 String Constants on https://www.postgresql.org/docs/9.5/sql-syntax-lexical.html
func StringSliceDiff ¶
func StructExportedFields ¶
func StructExportedFields(obj interface{}) (fields []string)
func StructValues ¶
Types ¶
type Builder ¶
type Builder struct { ConditionBuilder ConditionBuilder // contains filtered or unexported fields }
Example ¶
builder := NewBuilder() var sql string //Select sql = builder.Select("a.tableA"). Alias("t"). Fields("t.*", "tb.*", "sum(t.num) sum_num"). LeftJoin("a.tableB", "tb", "t.id=tb.tid"). Where("t.field1 = 1"). OrderBy("a.id"). GroupBy("a.name"). Having("sum_num > 300"). ForUpdate(). Build() fmt.Println("select:") fmt.Println(sql) // print: // SELECT t.*,tb.*,sum(t.num) sum_num // FROM a.tableA AS t // LEFT JOIN a.tableB AS tb ON t.id=tb.tid // WHERE (t.field1 = 1) // GROUP BY a.name // ORDER BY a.id // HAVING sum_num > 300 // FOR UPDATE builder.Clear() //Delete sql = builder.Delete("a.tableA"). Alias("t"). Equal("t.id", 1). Build() fmt.Println("delete:") fmt.Println(sql) // print: // DELETE FROM a.tableA AS t WHERE (t.id = 1) builder.Clear() // Insert now, _ := time.Parse("2006-01-02 15:04:05", "2020-05-01 00:00:00") builder = builder.Insert("a.tableA"). Values([]User{ { Name: "a", Age: 1, IsAdmin: true, Remark: "aa", CreatedBy: 1, CreatedAt: &now, }, { Name: "b", Age: 10, IsAdmin: false, Remark: "bb", CreatedBy: 1, CreatedAt: &now, }, }) // 如果需要限定只插入某些字段,使用Cols()方法 // builder.Cols("Name", "Age", "IsAdmin", "CreatedBy", "CreatedAt") fmt.Println("insert:") fmt.Println(builder.Build()) // print: // INSERT INTO a.tableA(name,age,is_admin,remark,created_by,created_at) // VALUES // ('a',1,true,'aa',1,'2020-05-01T00:00:00Z'), // ('b',10,false,'bb',1,'2020-05-01T00:00:00Z') builder.Clear() // update builder = builder.Update("a.user"). Set("name = 'aaa'", "age = 12"). //Set("age = age + 1"). // Set()支持复杂的update赋值操作 SetMap(map[string]interface{}{ "is_admin": true, "update_at": now, }). Equal("id", 1) fmt.Println("update:Set/setMap") fmt.Println(builder.Build()) // print: // UPDATE a.user SET // name = 'aaa',age = 12,update_at = '2020-05-01T00:00:00Z',is_admin = true // WHERE (id = 1) // 也可以使用struct方式,SetStruct()方法 // 使用SetStruct()后,Set()和SetMap()的设置将不会生效 builder.SetStruct(User{ Name: "a", Age: 1, IsAdmin: true, Remark: "aa", CreatedBy: 1, CreatedAt: &now, }) // 如果需要限定SetStruct()中只更新某些字段,使用Cols()方法 // builder.Cols("Name", "Age", "IsAdmin", "CreatedBy", "CreatedAt") fmt.Println("update:SetStruct") fmt.Println(builder.Build()) // print: // UPDATE a.user SET // (id,name,age,is_admin,remark,updated_by,updated_at) = // (0,'a',1,true,'aa',0,NULL) // WHERE (id = 1)
Output:
func NewBuilder ¶
func NewBuilder() *Builder
func (*Builder) BuildCount ¶
func (*Builder) OnConflictDoNothing ¶
func (*Builder) SelectSubQuery ¶
func (*Builder) Strategies ¶
添加自定义sql策略 Strategy接口形式
func (*Builder) StrategyFuncs ¶
func (b *Builder) StrategyFuncs(strategyFuncs ...StrategyFunc) *Builder
添加自定义sql策略 回调函数形式
func (*Builder) TryDateRange ¶
func (*Builder) TryMultiLike ¶
func (*Builder) TryTimeRange ¶
type ConditionBuilder ¶
type ConditionBuilder struct {
// contains filtered or unexported fields
}
func (*ConditionBuilder) Any ¶
func (b *ConditionBuilder) Any(dbField string, values interface{}) *ConditionBuilder
添加Any条件 structValues 可传类型:
string: 子查询sql array/slice: 结果集,效果同In
func (*ConditionBuilder) Between ¶
func (b *ConditionBuilder) Between(dbField string, start, end interface{}) *ConditionBuilder
添加BETWEEN条件
func (*ConditionBuilder) Equal ¶
func (b *ConditionBuilder) Equal(dbField string, value interface{}) *ConditionBuilder
添加相等条件
func (*ConditionBuilder) In ¶
func (b *ConditionBuilder) In(dbField string, values interface{}) *ConditionBuilder
添加IN条件
func (*ConditionBuilder) Like ¶
func (b *ConditionBuilder) Like(dbField, value string) *ConditionBuilder
添加LIKE条件,左右模糊匹配, 如果需要单边模糊匹配,请使用Where
func (*ConditionBuilder) MultiLike ¶
func (b *ConditionBuilder) MultiLike(dbFields []string, value string) *ConditionBuilder
添加多个LIKE条件
func (*ConditionBuilder) NotIn ¶
func (b *ConditionBuilder) NotIn(dbField string, values interface{}) *ConditionBuilder
添加NOT IN条件
func (*ConditionBuilder) Or ¶
func (b *ConditionBuilder) Or(strs ...string) *ConditionBuilder
添加多个OR条件
func (*ConditionBuilder) TryAny ¶
func (b *ConditionBuilder) TryAny(dbField string, values interface{}) *ConditionBuilder
添加IN条件,value为零值时跳过
func (*ConditionBuilder) TryDateRange ¶
func (b *ConditionBuilder) TryDateRange( dbField string, startDate, endDate time.Time) *ConditionBuilder
添加日期范围条件,value为零值时跳过
func (*ConditionBuilder) TryEqual ¶
func (b *ConditionBuilder) TryEqual(dbField string, value interface{}) *ConditionBuilder
添加相等条件,value为零值时跳过
func (*ConditionBuilder) TryIn ¶
func (b *ConditionBuilder) TryIn(dbField string, values interface{}) *ConditionBuilder
添加IN条件,value为零值时跳过
func (*ConditionBuilder) TryLike ¶
func (b *ConditionBuilder) TryLike(dbField string, value string) *ConditionBuilder
添加LIKE条件,左右模糊匹配,value为零值时跳过
func (*ConditionBuilder) TryMap ¶
func (b *ConditionBuilder) TryMap(where map[string]interface{}) *ConditionBuilder
func (*ConditionBuilder) TryMultiLike ¶
func (b *ConditionBuilder) TryMultiLike(dbFields []string, value string) *ConditionBuilder
添加多个LIKE条件,value为零值时跳过
func (*ConditionBuilder) TryTimeRange ¶
func (b *ConditionBuilder) TryTimeRange( dbField string, startTime, endTime time.Time) *ConditionBuilder
添加时间范围条件,value为零值时跳过
func (*ConditionBuilder) Where ¶
func (b *ConditionBuilder) Where(strs ...string) *ConditionBuilder
添加多个查询AND条件
func (*ConditionBuilder) WhereMap ¶
func (b *ConditionBuilder) WhereMap(where map[string]interface{}) *ConditionBuilder
type StrategyFunc ¶
type StrategyFunc func(b *Builder)
type TryDateRange ¶
func (TryDateRange) Execute ¶
func (t TryDateRange) Execute(b *Builder)
type TryMultiLike ¶
func (TryMultiLike) Execute ¶
func (t TryMultiLike) Execute(b *Builder)
Click to show internal directories.
Click to hide internal directories.