package {{.pkg}} {{if .withCache}} import ( "context" "fmt" sq "github.com/Masterminds/squirrel" "github.com/zeromicro/go-zero/core/stores/cache" "github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/core/stores/sqlc" ) {{else}} import ( "context" "fmt" "github.com/zeromicro/go-zero/core/stores/sqlx" ) {{end}} var _ {{.upperStartCamelObject}}Model = (*custom{{.upperStartCamelObject}}Model)(nil) type ( // {{.upperStartCamelObject}}Model is an interface to be customized, add more methods here, // and implement the added methods in custom{{.upperStartCamelObject}}Model. {{.upperStartCamelObject}}Model interface { {{.lowerStartCamelObject}}Model // 以下为自定义方法 FindOneByName(ctx context.Context, name string) (*{{.upperStartCamelObject}}, error) FindByName(ctx context.Context, name string) (*[]{{.upperStartCamelObject}}, error) List(ctx context.Context, offset int, limit int) (*[]{{.upperStartCamelObject}}, error) Count(ctx context.Context) (int64, error) {{if not .withCache}}withSession(session sqlx.Session) {{.upperStartCamelObject}}Model{{end}} } custom{{.upperStartCamelObject}}Model struct { *default{{.upperStartCamelObject}}Model } ) // New{{.upperStartCamelObject}}Model returns a model for the database table. func New{{.upperStartCamelObject}}Model(conn sqlx.SqlConn{{if .withCache}}, c cache.CacheConf, opts ...cache.Option{{end}}) {{.upperStartCamelObject}}Model { return &custom{{.upperStartCamelObject}}Model{ default{{.upperStartCamelObject}}Model: new{{.upperStartCamelObject}}Model(conn{{if .withCache}}, c, opts...{{end}}), } } {{if not .withCache}} func (m *custom{{.upperStartCamelObject}}Model) withSession(session sqlx.Session) {{.upperStartCamelObject}}Model { return New{{.upperStartCamelObject}}Model(sqlx.NewSqlConnFromSession(session)) } {{end}} // 以下为自定义方法 // 示例: findOneByeName 根据name查找单条记录 func (m *default{{.upperStartCamelObject}}Model) FindOneByName(ctx context.Context, name string) (*{{.upperStartCamelObject}}, error) { var cacheKey = fmt.Sprintf("{{.lowerStartCamelObject}}:name:%s", name) // 缓存key var resp {{.upperStartCamelObject}} // 缓存模式 err := m.QueryRowCtx(ctx, &resp, cacheKey, func(ctx context.Context,conn sqlx.SqlConn, v interface{}) error { query := fmt.Sprintf("select %s from %s where name = ?", {{.lowerStartCamelObject}}Rows, m.table) return conn.QueryRowCtx(ctx,v, query, name) }) // 非缓存模式 // query := fmt.Sprintf("select %s from %s where name = ?", {{.lowerStartCamelObject}}Rows, m.table) // query := "select * from {{.lowerStartCamelObject}} where name = ?" // err := m.QueryRowNoCache(&resp, query, name) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } // 示例: findByeName 根据name查找多条记录 func (m *default{{.upperStartCamelObject}}Model) FindByName(ctx context.Context, name string) (*[]{{.upperStartCamelObject}}, error) { var resp []{{.upperStartCamelObject}} // 非缓存模式,多条记录不建议缓存 // query := "select * from {{.lowerStartCamelObject}} where name = ?" query := fmt.Sprintf("select %s from %s where name = ?", {{.lowerStartCamelObject}}Rows, m.table) err := m.QueryRowsNoCache(&resp, query, name) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } // 示例: List 列表 func (m *default{{.upperStartCamelObject}}Model) List(ctx context.Context, offset int, limit int) (*[]{{.upperStartCamelObject}}, error) { var resp []{{.upperStartCamelObject}} query := fmt.Sprintf("select %s from %s limit ? offset ?", {{.lowerStartCamelObject}}Rows, m.table) // query := "select * from {{.lowerStartCamelObject}} limit ? offset ?" err := m.QueryRowsNoCache(&resp, query, limit, offset) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } // 示例: count 统计,返回总数,使用sql语法糖 func (m *default{{.upperStartCamelObject}}Model) Count(ctx context.Context) (int64, error) { sqlGen := sq.Select("count(*)").From(m.table) query, args, _ := sqlGen.ToSql() var count int64 err := m.QueryRowsNoCacheCtx(ctx, &count, query, args) switch err { case nil: return count, nil case sqlc.ErrNotFound: return 0, ErrNotFound default: return 0, err } }