mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-10-31 08:29:33 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package dbdata
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"reflect"
 | |
| )
 | |
| 
 | |
| const PageSize = 10
 | |
| 
 | |
| var ErrNotFound = errors.New("ErrNotFound")
 | |
| 
 | |
| func Add(data interface{}) error {
 | |
| 	_, err := xdb.InsertOne(data)
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| func Update(fieldName string, value interface{}, data interface{}) error {
 | |
| 	_, err := xdb.Where(fieldName+"=?", value).Update(data)
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| func Del(data interface{}) error {
 | |
| 	_, err := xdb.Delete(data)
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| func extract(data interface{}, fieldName string) interface{} {
 | |
| 	ref := reflect.ValueOf(data)
 | |
| 	r := &ref
 | |
| 	if r.Kind() == reflect.Ptr {
 | |
| 		e := r.Elem()
 | |
| 		r = &e
 | |
| 	}
 | |
| 	field := r.FieldByName(fieldName).Interface()
 | |
| 	return field
 | |
| }
 | |
| 
 | |
| // 更新全部字段
 | |
| func Set(data interface{}) error {
 | |
| 	id := extract(data, "Id")
 | |
| 	_, err := xdb.ID(id).AllCols().Update(data)
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| func One(fieldName string, value interface{}, data interface{}) error {
 | |
| 	has, err := xdb.Where(fieldName+"=?", value).Get(data)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	if !has {
 | |
| 		return ErrNotFound
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func CountAll(data interface{}) int {
 | |
| 	n, _ := xdb.Count(data)
 | |
| 	return int(n)
 | |
| }
 | |
| 
 | |
| func Find(data interface{}, limit, page int) error {
 | |
| 	if limit == 0 {
 | |
| 		return xdb.Find(data)
 | |
| 	}
 | |
| 
 | |
| 	start := (page - 1) * limit
 | |
| 	return xdb.Limit(limit, start).Find(data)
 | |
| }
 | |
| 
 | |
| func CountPrefix(fieldName string, prefix string, data interface{}) int {
 | |
| 	n, _ := xdb.Where(fieldName+" like ?", prefix+"%").Count(data)
 | |
| 	return int(n)
 | |
| }
 | |
| 
 | |
| func Prefix(fieldName string, prefix string, data interface{}, limit, page int) error {
 | |
| 	where := xdb.Where(fieldName+" like ?", prefix+"%")
 | |
| 	if limit == 0 {
 | |
| 		return where.Find(data)
 | |
| 	}
 | |
| 
 | |
| 	start := (page - 1) * limit
 | |
| 	return where.Limit(limit, start).Find(data)
 | |
| }
 |