In another post, we describe how data tables in Backendless map to the client-side classes whose instances contain persisted data objects. However, there are scenarios when the default mapping is undesirable. In that case, Backendless client libraries provide an API to override the mapping.
For example, consider the following data table (Restaurant):
Suppose that for some reason the client-side class for the objects in the Restaurant table must be called PlaceToEat. The mapping between the Restaurant table and the PlaceToEat class can be established using the following API:
Backendless.Data.mapTableToClass( "Restaurant", PlaceToEat.class );
Backendless.Data.mapTableToClass("Restaurant", PlaceToEat::class.java)
[[Backendless.shared.data of:[PlaceToEat class]] mapToTableWithTableName:@"Restaurant"];
Backendless.shared.data.of(PlaceToEat.self).mapToTable(tableName: "Restaurant")
Backendless.Data.mapTableToClass('Restaurant', PlaceToEat) Backendless.Data.mapTableToClass('Location', Location)
Backendless.data.mapTableToClass("Restaurant", PlaceToEat);
Where the PlaceToEat class has the following structure (class’s fields and properties must match the table columns):
import com.backendless.BackendlessUser; import com.backendless.BackendlessUser; public class PlaceToEat { private String name; private String objectId; private String cuisine; private java.util.Listlocations; private BackendlessUser owner; // skipping getters and setters for brevity }
import com.backendless.BackendlessUser class PlaceToEat { var name: String? = null var objectId: String? = null var cuisine: String? = null var locations: List<Location>? = null var owner: BackendlessUser? = nul }
@interface PlaceToEat : NSObject @property (strong, nonatomic) NSString *objectId; @property (strong, nonatomic) NSString *name; @property (strong, nonatomic) NSString *cuisine; @property (strong, nonatomic) BackendlessUser *owner; @end
@objcMembers class PlaceToEat: NSObject { var objectId: String? var name: String? var cuisine: String? var owner: BackendlessUser? }
class PlaceToEat { constructor(props = {}) { let { name, ownerId, objectId, cuisine, locations } = props this.name = name this.objectId = objectId this.cuisine = cuisine this.locations = locations this.ownerId = ownerId } // skipping getters and setters for brevity } class Location { constructor(props = {}) { const { streetAddress, country, objectId, updated, created, ownerId, city, phoneNumber, menu } = props this.objectId = objectId this.streetAddress = streetAddress this.country = country this.updated = updated this.created = created this.ownerId = ownerId this.city = city this.phoneNumber = phoneNumber this.menu = menu } // skipping getters and setters for brevity }
import 'package:backendless_sdk/backendless_sdk.dart'; @reflector class PlaceToEat { String name; String objectId; String cuisine; Listlocations; BackendlessUser owner; }
It is recommended that mapTableToClass method is called right after the initApp method, that is before any other API which fetches data from the server.