iOS: ORM (Object-relational mapping)

      Nessun commento su iOS: ORM (Object-relational mapping)

SharkORM-prototype-logo-and-text-1-e1465121576444-copy-copy

Ciao a tutti cari amici di iProg, oggi vorrei illustrarvi una fantastica libreria opensource  per iOS, ma prima di introdurvi quest’ultima vorrei spendere due parole su cosa si intende per ORM.

Il termine ORM fa riferimento alla tecnica di mappatura dei dati da un modello object oriented su  di un modello di dati relazionale, quindi il framework che andrò a presentarvi consentirà di effettuare il mapping tra le classi e le tabelle di un database inoltre la maggior parte degli ORM consentono di effettuare delle query per il recupero dei dati.

Dopo questa piccola premessa (molto basilare) andiamo a creare un’ applicazione d’esempio. Per prima cosa creiamo un nuovo progetto swift di tipo single view application (il framework è compatibile anche con il linguaggio Objective-C), quindi spostiamoci nella cartella del progetto e lo inizializziamo come progetto “cocoapods” (se non sai come fare vedi qui) fatto ciò nel file Podfile inseriamo la seguente stringa: pod “SharkORM” in maniera da aggiungere la libreria sharkorm nel nostro progetto, infine installiamo il tutto tramite il comando pod install.

Per prima cosa apriamo il file Appdelegate per settare il tutto:

[code lang=”swift”]
import UIKit
import SharkORM
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,SRKDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
SharkORM.setDelegate(self)
SharkORM.openDatabaseNamed("myDatabase")
return true
}[/code]

A questo punto creiamo due classicome modello dei nostri dati, La prima è Person:

[code lang=”swift”]import UIKit
import SharkORM
class Person: SRKObject {
dynamic var nome : String?
dynamic var cognome : String?
dynamic var eta : NSNumber?
dynamic var auto : Auto?
}[/code]

Mentre l’altra è Auto:

[code lang=”swift”]import UIKit
import SharkORM
class Auto: SRKObject {
dynamic var name : String?
dynamic var marca : String?
}[/code]

nel file ViewController scriviamo:

[code lang=”swift”]import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
//Cancelliamo tutti i dati dalle tabelle
dropTable()
//creo delle persone e delle auto
//ad ogni persona gli assegno un auto ed infino eseguo il commit
//

let citroenC1 = Auto()
citroenC1.name = "C1"
citroenC1.marca = "Citroen"

let citroenC3 = Auto()
citroenC3.name = "C3 picasso"
citroenC3.marca = "Citroen"

let mario = Person()
mario.nome = "Mario"
mario.cognome = "Rossi"
mario.eta = 40
mario.auto = citroenC1
mario.commit()
let francesco = Person()
francesco.nome = "Francesco"
francesco.cognome = "Bianchi"
francesco.eta = 10
francesco.auto = citroenC3
francesco.commit()

let giorgio = Person()
giorgio.nome = "Giorgio"
giorgio.cognome = "Savarese"
giorgio.eta = 20
giorgio.auto = citroenC3
giorgio.commit()

//effetuo una semplice query (seleziono tutte le persone con età > 9 e li ordino per nome)
let results = Person.query()
.whereWithFormat("eta > %@", withParameters: [9])
.orderBy("nome")
.fetch()

var persons = [Person]()

//salvo il risultato in un array di persone
for i in results {
let person = Person ()
person.nome = i.nome
person.cognome = i.cognome
person.eta = i.eta
person.auto = i.auto
persons.append(person)
}
//Stampo i nomi delle persone restituitemi dalla query
for i in persons {
print("\(i.nome!)")
}

}

func dropTable(){
Person.query().fetch().removeAll()
Auto.query().fetch().removeAll()
}</pre>

[/code]

Questo è solo un semplice esempio di come utilizzare questa libreria, per maggiori informazioni potete visionare la documentazione presso il seguente link

download_esempio-300x120