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)
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.