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
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值