diff --git a/cmd/gormgen/pkg/parser.go b/cmd/gormgen/pkg/parser.go index 7ab7fc3..0815fe6 100644 --- a/cmd/gormgen/pkg/parser.go +++ b/cmd/gormgen/pkg/parser.go @@ -78,7 +78,6 @@ func (p *Parser) parseTypes(file *ast.File) (ret []structConfig) { optionField fieldConfig ) - // type is ident, get onlyField type if t, _ok := v.Type.(*ast.Ident); _ok { optionField.FieldType = t.String() } else { @@ -89,7 +88,6 @@ func (p *Parser) parseTypes(file *ast.File) (ret []structConfig) { } } - // get file name if len(v.Names) > 0 { optionField.FieldName = v.Names[0].String() optionField.ColumnName = gorm.ToDBName(optionField.FieldName) diff --git a/cmd/gormgen/pkg/template.go b/cmd/gormgen/pkg/template.go index f31a0f7..0829d7a 100644 --- a/cmd/gormgen/pkg/template.go +++ b/cmd/gormgen/pkg/template.go @@ -136,6 +136,28 @@ func (qb *{{$queryBuilderName}}) Where{{call $.Helpers.Titelize .FieldName}}(p d return qb } +func (qb *{{$queryBuilderName}}) Where{{call $.Helpers.Titelize .FieldName}}In(value []{{.FieldType}}) *{{$queryBuilderName}} { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "{{.ColumnName}}", "IN"), + value, + }) + return qb +} + +func (qb *{{$queryBuilderName}}) Where{{call $.Helpers.Titelize .FieldName}}NotIn(value []{{.FieldType}}) *{{$queryBuilderName}} { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "{{.ColumnName}}", "NOT IN"), + value, + }) + return qb +} + func (qb *{{$queryBuilderName}}) OrderBy{{call $.Helpers.Titelize .FieldName}}(asc bool) *{{$queryBuilderName}} { order := "DESC" if asc { diff --git a/internal/api/repository/db_repo/README.md b/internal/api/repository/db_repo/README.md new file mode 100644 index 0000000..fabe866 --- /dev/null +++ b/internal/api/repository/db_repo/README.md @@ -0,0 +1,51 @@ +## 使用示例 + +以 `user_demo` 为例: + +```go +// 查询:多条 + 分页 +page := 2 +num := 2 +offset := (page - 1) * num + +user, err = user_demo_repo.NewQueryBuilder(). + WhereIdNotIn([]int32{1, 2, 3}). + WhereUserName(db_repo.EqualPredicate, "tom"). + Limit(num). + Offset(offset). + QueryAll(u.db.GetDbR().WithContext(ctx.RequestContext())) + +// 查询:总数 +count, err := user_demo_repo.NewQueryBuilder(). + WhereIdNotIn([]int32{1, 2, 3}). + WhereUserName(db_repo.EqualPredicate, "tom"). + Count(u.db.GetDbR().WithContext(ctx.RequestContext())) + +// 查询:单条 +user, err = user_demo_repo.NewQueryBuilder(). + WhereUserName(db_repo.EqualPredicate, "tom"). + QueryOne(u.db.GetDbR().WithContext(ctx.RequestContext())) + +// 创建 +model := user_demo_repo.NewModel() +model.UserName = user.UserName +model.NickName = user.NickName +model.Mobile = user.Mobile + +id, err = model.Create(u.db.GetDbW().WithContext(ctx.RequestContext())) + +// 编辑 +model := user_demo_repo.NewModel() +model.Id = id + +data := map[string]interface{}{ + "nick_name": nickname, +} + +err = model.Updates(u.db.GetDbW().WithContext(ctx.RequestContext()), data) + +// 删除 +model := user_demo_repo.NewModel() +model.Id = id +err = model.Delete(u.db.GetDbW().WithContext(ctx.RequestContext())) +``` \ No newline at end of file diff --git a/internal/api/repository/db_repo/user_demo_repo/gen_user_demo.go b/internal/api/repository/db_repo/user_demo_repo/gen_user_demo.go index 3597bf3..f407062 100755 --- a/internal/api/repository/db_repo/user_demo_repo/gen_user_demo.go +++ b/internal/api/repository/db_repo/user_demo_repo/gen_user_demo.go @@ -120,6 +120,28 @@ func (qb *userDemoRepoQueryBuilder) WhereId(p db_repo.Predicate, value int32) *u return qb } +func (qb *userDemoRepoQueryBuilder) WhereIdIn(value []int32) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "id", "IN"), + value, + }) + return qb +} + +func (qb *userDemoRepoQueryBuilder) WhereIdNotIn(value []int32) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "id", "NOT IN"), + value, + }) + return qb +} + func (qb *userDemoRepoQueryBuilder) OrderById(asc bool) *userDemoRepoQueryBuilder { order := "DESC" if asc { @@ -141,6 +163,28 @@ func (qb *userDemoRepoQueryBuilder) WhereUserName(p db_repo.Predicate, value str return qb } +func (qb *userDemoRepoQueryBuilder) WhereUserNameIn(value []string) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "user_name", "IN"), + value, + }) + return qb +} + +func (qb *userDemoRepoQueryBuilder) WhereUserNameNotIn(value []string) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "user_name", "NOT IN"), + value, + }) + return qb +} + func (qb *userDemoRepoQueryBuilder) OrderByUserName(asc bool) *userDemoRepoQueryBuilder { order := "DESC" if asc { @@ -162,6 +206,28 @@ func (qb *userDemoRepoQueryBuilder) WhereNickName(p db_repo.Predicate, value str return qb } +func (qb *userDemoRepoQueryBuilder) WhereNickNameIn(value []string) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "nick_name", "IN"), + value, + }) + return qb +} + +func (qb *userDemoRepoQueryBuilder) WhereNickNameNotIn(value []string) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "nick_name", "NOT IN"), + value, + }) + return qb +} + func (qb *userDemoRepoQueryBuilder) OrderByNickName(asc bool) *userDemoRepoQueryBuilder { order := "DESC" if asc { @@ -183,6 +249,28 @@ func (qb *userDemoRepoQueryBuilder) WhereMobile(p db_repo.Predicate, value strin return qb } +func (qb *userDemoRepoQueryBuilder) WhereMobileIn(value []string) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "mobile", "IN"), + value, + }) + return qb +} + +func (qb *userDemoRepoQueryBuilder) WhereMobileNotIn(value []string) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "mobile", "NOT IN"), + value, + }) + return qb +} + func (qb *userDemoRepoQueryBuilder) OrderByMobile(asc bool) *userDemoRepoQueryBuilder { order := "DESC" if asc { @@ -204,6 +292,28 @@ func (qb *userDemoRepoQueryBuilder) WhereIsDeleted(p db_repo.Predicate, value in return qb } +func (qb *userDemoRepoQueryBuilder) WhereIsDeletedIn(value []int32) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "is_deleted", "IN"), + value, + }) + return qb +} + +func (qb *userDemoRepoQueryBuilder) WhereIsDeletedNotIn(value []int32) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "is_deleted", "NOT IN"), + value, + }) + return qb +} + func (qb *userDemoRepoQueryBuilder) OrderByIsDeleted(asc bool) *userDemoRepoQueryBuilder { order := "DESC" if asc { @@ -225,6 +335,28 @@ func (qb *userDemoRepoQueryBuilder) WhereCreatedAt(p db_repo.Predicate, value ti return qb } +func (qb *userDemoRepoQueryBuilder) WhereCreatedAtIn(value []time.Time) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "created_at", "IN"), + value, + }) + return qb +} + +func (qb *userDemoRepoQueryBuilder) WhereCreatedAtNotIn(value []time.Time) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "created_at", "NOT IN"), + value, + }) + return qb +} + func (qb *userDemoRepoQueryBuilder) OrderByCreatedAt(asc bool) *userDemoRepoQueryBuilder { order := "DESC" if asc { @@ -246,6 +378,28 @@ func (qb *userDemoRepoQueryBuilder) WhereUpdatedAt(p db_repo.Predicate, value ti return qb } +func (qb *userDemoRepoQueryBuilder) WhereUpdatedAtIn(value []time.Time) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "updated_at", "IN"), + value, + }) + return qb +} + +func (qb *userDemoRepoQueryBuilder) WhereUpdatedAtNotIn(value []time.Time) *userDemoRepoQueryBuilder { + qb.where = append(qb.where, struct { + prefix string + value interface{} + }{ + fmt.Sprintf("%v %v ?", "updated_at", "NOT IN"), + value, + }) + return qb +} + func (qb *userDemoRepoQueryBuilder) OrderByUpdatedAt(asc bool) *userDemoRepoQueryBuilder { order := "DESC" if asc {