美文网首页
IOS DB 封装类使用

IOS DB 封装类使用

作者: 孔雨露 | 来源:发表于2019-10-17 21:59 被阅读0次

    @[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
        }
    

    相关文章

      网友评论

          本文标题:IOS DB 封装类使用

          本文链接:https://www.haomeiwen.com/subject/aihbmctx.html