code: func (session *Session) FindAndCount(rowsSlicePtr interface{}, condiBean ...interface{}) (int64, error) {
  	if session.isAutoClose {
  		defer session.Close()
  	}
  
  	session.autoResetStatement = false
  	err := session.find(rowsSlicePtr, condiBean...)
  	if err != nil {
  		return 0, err
  	}
  
  	sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr))
  	if sliceValue.Kind() != reflect.Slice && sliceValue.Kind() != reflect.Map {
  		return 0, errors.New("needs a pointer to a slice or a map")
  	}
  
  	sliceElementType := sliceValue.Type().Elem()
  	if sliceElementType.Kind() == reflect.Ptr {
  		sliceElementType = sliceElementType.Elem()
  	}
  	session.autoResetStatement = true
  
  	if session.statement.selectStr != "" {
  		session.statement.selectStr = ""
  	}
  	if session.statement.OrderStr != "" {
  		session.statement.OrderStr = ""
  	}
  
  	return session.Count(reflect.New(sliceElementType).Interface())
  }
docs: // FindAndCount find the results and also return the counts