IOS DB 封装类使用

2019-10-17  本文已影响0人  孔雨露

@[TOC](IOS DB 封装类使用)

IOS DB 工具类使用

1. 定义模型


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)
    }

3. 更新记录

   /// 更新单个 Student
    public class func updateStudent(student : Student) {
        KRealmManager.addCanUpdate(student)
    }
    /// 更新多个 Student
    public class func updateStudent(students : [Student]) {
        let defaultRealm = KRealmManager.sharedInstance
        try! defaultRealm.write {
            defaultRealm.add(students, update: .all)
        }
    }
    /// 更新多个 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
    public class func deleteStudent(student : Student) {
        let defaultRealm = KRealmManager.sharedInstance
        try! defaultRealm.write {
            defaultRealm.delete(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
    }
public class func getStudent(from id : Int) -> Student? {
        return KRealmManager.select(type: Student.self, by: "\(id)")
    }
/// 获取 指定条件 的 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
    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
    }
上一篇 下一篇

猜你喜欢

热点阅读