@[TOC](IOS DB 封装类使用)
IOS DB 工具类使用
1. 定义模型
- 如下定义一个Student模型继承Object (Realm提供的基类)
class Book: Object {
@objc dynamic var name = ""
@objc dynamic var author = ""
/// LinkingObjects 反向表示该对象的拥有者
let owners = LinkingObjects(fromType: Student.self, property: "books")
convenience init(name : String,author : String) {
self.init();
self.name = name;
self.author = author;
}
}
class Student: Object {
@objc dynamic var name = ""
@objc dynamic var age = 18
@objc dynamic var weight = 156
@objc dynamic var id = 0
@objc dynamic var address = ""
@objc dynamic var birthday : NSDate? = nil
@objc dynamic var photo : NSData? = nil
@objc dynamic var tempID : String? = nil
@objc dynamic var tempID2 : String? = nil
@objc dynamic var groupName : String? = nil
//List 用来表示一对多的关系:一个 Student 中拥有多个 Book。
let books = List<Book>()
//重写 Object.primaryKey() 可以设置模型的主键。
//声明主键之后,对象将被允许查询,更新速度更加高效,并且要求每个对象保持唯一性。
//一旦带有主键的对象被添加到 Realm 之后,该对象的主键将不可修改。
override static func primaryKey() -> String? {
return "id"
}
//重写 Object.ignoredProperties() 可以防止 Realm 存储数据模型的某个属性
override static func ignoredProperties() -> [String] {
return ["tempID"]
}
//重写 Object.indexedProperties() 方法可以为数据模型中需要添加索引的属性建立索引,Realm 支持为字符串、整型、布尔值以及 Date 属性建立索引。
override static func indexedProperties() -> [String] {
return ["name"]
}
}
2. 新增记录
/// 保存一个Student
private func insertStudent(by student : Student) -> Void {
KRealmManager.add(student)
}
/// 保存一些Student
private func insertStudents(by students : [Student]) -> Void {
KRealmManager.addListData(students)
}
- 调用
KRealmManager.add(student)
如果没有新建表,会自动创建一个跟student模型属性对应表(被忽略的属性,或计算型属性不会创建表字段)。
3. 更新记录
- 更新单个 Student
/// 更新单个 Student
public class func updateStudent(student : Student) {
KRealmManager.addCanUpdate(student)
}
- 更新多个 Student
/// 更新多个 Student
public class func updateStudent(students : [Student]) {
let defaultRealm = KRealmManager.sharedInstance
try! defaultRealm.write {
defaultRealm.add(students, update: .all)
}
}
- 更新多个 Student的某个属性
/// 更新多个 Student
public class func updateStudentAge(age : Int) {
let defaultRealm = KRealmManager.sharedInstance
try! defaultRealm.write {
let students = defaultRealm.objects(Student.self)
students.setValue(age, forKey: "age")
}
}
4. 删除记录
- 删除单个 Student
/// 删除单个 Student
public class func deleteStudent(student : Student) {
let defaultRealm = KRealmManager.sharedInstance
try! defaultRealm.write {
defaultRealm.delete(student)
}
}
- 删除多个 Student
/// 删除多个 Student
public class func deleteStudent(students : [Student]) {
KRealmManager.delete(students)
}
5. 查询记录
- 获取一个表中的所有记录
/// 获取 所保存的 Student
public class func getStudents() -> [Student] {
let results = KRealmManager.selectByAll(Student.self)
var students = [Student]()
results.forEach { (item) in
students.append(item)
}
return students
}
- 获取 指定id (主键) 的 Student
public class func getStudent(from id : Int) -> Student? {
return KRealmManager.select(type: Student.self, by: "\(id)")
}
- 获取 指定条件 的 Student
/// 获取 指定条件 的 Student
public class func getStudentByTerm(_ term: String) -> [Student] {
let results = KRealmManager.selectByNSPredicate(Student.self, predicate: NSPredicate(format: term))
var students = [Student]()
results.forEach { (item) in
students.append(item)
}
return students
}
- 获取 学号升降序 的 Student
/// 获取 学号升降序 的 Student
public class func getStudentByIdSorted(_ isAscending: Bool) -> [Student] {
let results = KRealmManager.selectScoretByAll(Student.self, key: "id", isAscending: isAscending)
var students = [Student]()
results.forEach { (item) in
students.append(item)
}
return students
}
网友评论