diff --git a/README.md b/README.md index 631fbe3..8c3e4d4 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,7 @@ INSERT INTO ### 查询映射 -- 示例 ```go +// 如果没有结果,会返回 sql.ErrNoRows func QueryOne(db *sql.DB) (*User,error){ tdMapper := NewMapper() @@ -89,8 +90,7 @@ func QueryOne(db *sql.DB) (*User,error){ return &user, nil } -// 如果查询结果数量为0,则返回 sql.ErrNoRows -// var ErrNoRows = errors.New("sql: no rows in result set") +// 如果查询结果数量为0,不会返回错误 func QueryAll(db *sql.DB)([]*User, error) { tdMapper := NewMapper() diff --git a/mapping.go b/mapping.go index 005fd81..6d2d32b 100644 --- a/mapping.go +++ b/mapping.go @@ -247,10 +247,6 @@ func (b *Mapper) ScanRowsWithContext(ctx context.Context, target any, rows *sql. // 将新实例添加到slice中 vf.Set(reflect.Append(vf, newStruct)) } - - if vf.Len() == 0 { // 如果slice为空,返回 sql.ErrNoRows - return sql.ErrNoRows - } return nil default: return errors.New("target must be a pointer to a struct or a slice of structs") @@ -277,11 +273,11 @@ func (b *Mapper) scanRow(target reflect.Value, rows *sql.Rows) error { dest := make([]interface{}, len(columns)) for i, colName := range columns { // 拿到缓存的字段索引 - if idx, ok := mate.DBName2IndexCache[colName]; ok { - dest[i] = target.FieldByIndex(idx).Addr().Interface() - } else { + idx, ok := mate.DBName2IndexCache[colName] + if !ok { return fmt.Errorf("no corresponding field found for column %s", colName) } + dest[i] = target.FieldByIndex(idx).Addr().Interface() } // 扫描数据