设为首页 收藏本站
查看: 1179|回复: 0

[经验分享] SQLite Persistent Objects简化你的数据持久化工作

[复制链接]

尚未签到

发表于 2016-12-1 08:50:16 | 显示全部楼层 |阅读模式
  原文链接: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 , orderby),真对一个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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307937-1-1.html 上篇帖子: AndroidDataFramework 下篇帖子: SQLITE的C++接口之简明使用介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表