SQLite Persistent Objects简化你的数据持久化工作
原文链接:http://blog.csdn.net/dboylx/archive/2009/03/24/4019402.aspx iPhone开发包中有对SQLite的类库支持,但它是C接口,而且API麻烦的要死。当然,你可能会做些封装使它更好用些。但如果我告诉你这里 有个更好用的ORM,还是ActiveRecord的,你会不会高兴的发疯呢?它就是“SQLite Persistent Objects”,一款Objective-C实现的ActiveRecord。 Rails社区红透半边天的ORM模式。简单就是它最大特色,并不像某些ORM一味执着于纯OO的高贵血统,不计成本的实现华丽且优雅的ORM。在 Rails社区里流传着这样一句话:“除了JAVA社区的工程师,很少有人拿着一千页的《轻松学XXX》会觉得很高兴”(^_^)。当然,我们的 ActiveRecord也不缺传统ORM实现:事务,类型转换,校验,表连接,对象子父关系。但它是轻量级的,除此以外更允许你直接用SQL。 ActiveRecord已经把SQL按动词切开(像select,from,joins,where,group by,order by),真对一个Model的查询只需要修改你所关注的部分,让我们可以化复杂为简单,化简单为更简单。 在理想的世界里,我们所有Objective-C数据对象都知道如何自己保存与加载数据。我们调用了对象“save”方法后它就已经被保存起来,当我们需要加载数据时,只是简单的调用类方法来获取想要的数据,复杂查询也不排斥直接用SQL(但返回结果依然是对象)。 做了什么? 创建一个Objective-C类,它知道怎样把数据持久化到SQLite数据库上。不仅如此,它还隐藏了所有的实现细节:甚至不需要创建数据库与 表,或其它任何额外工作。类只需要继承自“SQLitePersistentObject”,然后,添加您想要持久化的Objective-C2.0属 性。当这个类被实例化后,调用”save”方法,会自动保存到数据库中。 它怎么工作的? 每一个“SQLitePersistentObject”的子类都会拥有数据库中对应的一张表。每一个属性(不包括集合类型, 像,NSDictionary,NSArray,NSSet或这些类的可变类型)都会持久化到表中相应字段中。属性中如果含有指针对象 是”SQLitePersistentObject”实例,也将会在关联表里新添条记录。 所有的属性都会保存么? 答案是否定的,当前并不支持c-string,voidpointer,strutct或union。但所有的数字(int,float等)都会保存在应的字段上。任何实现“NSCoding”(类似JAVA中的序列化接 口,但它需要自己实现,而JAVA只是标志型接口)接口的对象都可以保存在数据库中。已经支持的类 型:NSDate,NSString,NSData,NSMutableData,NSNumber与NSObject。 那些没有持久化支持的类,会用NSObject的持久机制,它会用”NSKeyedArchiver”把它归档为BLOB并保存在数据库里。 怎样使用? 把本项目的所有文档添加到你的项目中,添加”libsqlite3.dylib”库,接着声名你的模型类。 #import<foundation/foundation.h> #import“SQLitePersistentObject.h” @interfacePersistablePerson :SQLitePersistentObject { NSString*lastName; NSString*firstName; } @property(nonatomic,retain)NSString* lastName; @property(nonatomic,retain)NSString* firstName; @end 生成类文件后,创建实例: PersistablePerson *person = [[PersistablePersonalloc]init]; person.firstName =@”Joe”; person.lastName =@”Smith”; 调用”save”方法,保存到数据库中: [personsave]; 加载表中的数据也相当的简单。任何一个”Persistable”类都有多个提供查询的类方法。例如,你可以查询所有姓“Smith”的人: NSArray*people = [PersistablePerson findByLastName :@"Smith"] 或者更灵活的使用SQL查询条件: PeristablePerson *joeSmith = [PersistablePerson findFirstByCriteria :@"WHERE last_name = 'Smith' AND first_name = 'Joe']; 注意大写字母区分的情况用下划线代替(ActiveRecord的惯例)。”findByCriteria:”返回一个NSArray数组,”findFirstByCriteria:”返回一个对象。 更多资料: http://code.google.com/p/pldatabase/ 翻译自: http://iphonedevelopment.blogspot.com/2008/08/sqlite-persistent-objects.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 将redirect_to与特定的ActiveRecord对象一
- [Swift]LeetCode563. 二叉树的坡度 | Binary Tree Tilt
- 正则表达式 元字符列表
- 去掉xml中每对标签之外的换行符、空格、tab键
- Flex)使用CoverFlow_lib.swc类包创建多种照片墙效果
- xml – 只找到第一个出现的XPath表达式是什么?
- c# – 将类型约束到接口的目的是什么?
- swift – SpriteKit-如何放大和缩小SKScene?
- cocos2d3.x在win7的环境配置和安装
- 碎片Fragment完全解析fragment_main.xml/activity_main.xml