1 Star 0 Fork 1

go-genie/sqlx

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
model_list.go 3.68 KB
一键复制 编辑 原始数据 按行查看 历史
文兄 提交于 2025-06-17 16:11 +08:00 . init
package generator
import (
"fmt"
"gitee.com/go-genie/codegen"
)
func (m *Model) WriteCount(file *codegen.File) {
file.WriteBlock(
codegen.Func(
codegen.Var(codegen.Type(file.Use("gitee.com/go-genie/sqlx", "DBExecutor")), "db"),
codegen.Var(codegen.Type(file.Use("gitee.com/go-genie/sqlx/builder", "SqlCondition")), "condition"),
codegen.Var(codegen.Ellipsis(codegen.Type(file.Use("gitee.com/go-genie/sqlx/builder", "Addition"))), "additions"),
).
Named("Count").
MethodOf(codegen.Var(m.PtrType(), "m")).
Return(
codegen.Var(codegen.Int),
codegen.Var(codegen.Error),
).
Do(
codegen.Expr(`
count := -1
table := db.T(m)
_ = table
`),
func() codegen.Snippet {
if m.HasDeletedAt {
return codegen.Expr(
`condition = ?(condition, table.F("`+m.FieldKeyDeletedAt+`").Eq(0))`,
codegen.Id(file.Use("gitee.com/go-genie/sqlx/builder", "And")),
)
}
return nil
}(),
codegen.Expr(`
finalAdditions := []`+file.Use("gitee.com/go-genie/sqlx/builder", "Addition")+`{
`+file.Use("gitee.com/go-genie/sqlx/builder", "Where")+`(condition),
`+file.Use("gitee.com/go-genie/sqlx/builder", "Comment")+`(?),
}
if len(additions) > 0 {
finalAdditions = append(finalAdditions, additions...)
}
err := db.QueryExprAndScan(
`+file.Use("gitee.com/go-genie/sqlx/builder", "Select")+`(
`+file.Use("gitee.com/go-genie/sqlx/builder", "Count")+`(),
).
From(db.T(m), finalAdditions...),
&count,
)
return count, err
`,
file.Val(m.StructName+".Count"),
),
),
)
}
func (m *Model) WriteList(file *codegen.File) {
file.WriteBlock(
codegen.Func(
codegen.Var(codegen.Type(file.Use("gitee.com/go-genie/sqlx", "DBExecutor")), "db"),
codegen.Var(codegen.Type(file.Use("gitee.com/go-genie/sqlx/builder", "SqlCondition")), "condition"),
codegen.Var(codegen.Ellipsis(codegen.Type(file.Use("gitee.com/go-genie/sqlx/builder", "Addition"))), "additions"),
).
Named("List").
MethodOf(codegen.Var(m.PtrType(), "m")).
Return(
codegen.Var(codegen.Slice(codegen.Type(m.StructName))),
codegen.Var(codegen.Error),
).
Do(
codegen.Expr(`
list := make([]`+m.StructName+`, 0)
table := db.T(m)
_ = table
`),
func() codegen.Snippet {
if m.HasDeletedAt {
return codegen.Expr(
`condition = ?(condition, table.F("`+m.FieldKeyDeletedAt+`").Eq(0))`,
codegen.Id(file.Use("gitee.com/go-genie/sqlx/builder", "And")),
)
}
return nil
}(),
codegen.Expr(`
finalAdditions := []`+file.Use("gitee.com/go-genie/sqlx/builder", "Addition")+`{
`+file.Use("gitee.com/go-genie/sqlx/builder", "Where")+`(condition),
`+file.Use("gitee.com/go-genie/sqlx/builder", "Comment")+`(?),
}
if len(additions) > 0 {
finalAdditions = append(finalAdditions, additions...)
}
err := db.QueryExprAndScan(
`+file.Use("gitee.com/go-genie/sqlx/builder", "Select")+`(nil).
From(db.T(m), finalAdditions...),
&list,
)
return list, err
`,
file.Val(m.StructName+".List"),
),
),
)
}
func (m *Model) WriteBatchList(file *codegen.File) {
indexedFields := m.IndexFieldNames()
for _, field := range indexedFields {
method := fmt.Sprintf("BatchFetchBy%sList", field)
typ := m.FieldType(file, field)
file.WriteBlock(
codegen.Func(
codegen.Var(codegen.Type(file.Use("gitee.com/go-genie/sqlx", "DBExecutor")), "db"),
codegen.Var(codegen.Slice(typ), "values"),
).
Named(method).
MethodOf(codegen.Var(m.PtrType(), "m")).
Return(
codegen.Var(codegen.Slice(codegen.Type(m.StructName))),
codegen.Var(codegen.Error),
).
Do(
codegen.Expr(`
if len(values) == 0 {
return nil, nil
}
table := db.T(m)
condition := table.F("` + field + `").In(values)
return m.List(db, condition)
`),
),
)
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/go-genie/sqlx.git
git@gitee.com:go-genie/sqlx.git
go-genie
sqlx
sqlx
v1.1.3

搜索帮助