关于Realm,你要知道下面几点:
1.使用简单,大部分常用的功能(比如插入、查询等)都可以用一行简单的代码轻松完成,学习成本低。
2.Realm不是基于Core Data,也不是基于SQLite封装构建的。它有自己的数据库存储引擎。
3.Realm具有良好的跨平台特性,可以在iOS和Android平台上共同使用。代码可以使用 Swift 、 Objective-C 以及 Java 语言来编写。
安装
用Cocoapods导入Realm框架
首先在XCode中安装插件RealmPlugin/mac软件RealmBrowser
再新建新文件Realm ModelObject
创建模型类
这是一个模型类1
2
3
4
5
6
7
8
9
10
11
12
13import Foundation
import RealmSwift
class Status: Object {
dynamic var StatusID:Int?
dynamic var text:String?
}
创建一个一对多的模型类
1 |
|
1.List 用来表示一对多的关系:一个 StatusList 中拥有多个 Status。
2.List 和 Array 在使用上非常相似,所用的方法和访问数据的方法(索引和下标)都相同。正如你所见的一样,List 后标明了数据类型,所包含的所有对象都应该是相同类型的。
3.List 是泛型,这也是为什么我们没有在声明前面加上 dynamic 的原因,因为在 Objective-C 运行时无法表示泛型属性。
数据库插入操作
注意在AppDelegate中创建数据库对象,就可以全局调用了
1 | let realm = try! Realm() |
读取数据库
定义一个结果集1
2
3
4var statusItems: Results<Status>!
let realm = try! Realm()
statusItems = realm.objects(Status)
删除数据
比如删除一条ID是111的数据1
2
3
4let statusItem = realm.objects(Status).filter("StatusID = '111' ")
try! realm.write {
realm.delete(statusItem)
}
删除全部
1 | try! realm.write { |
更新数据
直接更新
1 | realm.write { |
通过主键更新
1 | 如果数据模型中设置了主键的话,那么可以使用Realm().add(_:update:)来更新对象(当对象不存在时也会自动插入新的对象。) |
通过KVC更新
1 | 这个是在运行时才能决定哪个属性需要更新的时候,这个对于大量更新的对象极为有用。 |
断言查询数据库
1 |
|
支持链式查询
1 | statusItems = self.realm.objects(Status).filter("StatusID > 111 ").filter("text = '这是第二条test'") |
对查询结果进行排序
1 |
|
添加主键(Primary Keys)
声明主键之后,对象将被允许查询,更新速度更加高效,并且要求每个对象保持唯一性。
一旦带有主键的对象被添加到 Realm 之后,该对象的主键将不可修改。
class Status: Object {
dynamic var StatusID:Int?
dynamic var text:String?
override static func primaryKey() -> Int? {
return "StatusID"
}
}
添加索引属性(Indexed Properties)
1 |
|
设置忽略属性(Ignored Properties)
1 | override static func ignoredProperties() -> [String] { |