yw6866 发表于 2016-12-1 08:50:16

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 , 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 = [init];
  person.firstName =@”Joe”;
  person.lastName =@”Smith”;
  调用”save”方法,保存到数据库中:
  ;
  加载表中的数据也相当的简单。任何一个”Persistable”类都有多个提供查询的类方法。例如,你可以查询所有姓“Smith”的人:
  NSArray*people =
  或者更灵活的使用SQL查询条件:
  PeristablePerson *joeSmith = ;
  注意大写字母区分的情况用下划线代替(ActiveRecord的惯例)。”findByCriteria:”返回一个NSArray数组,”findFirstByCriteria:”返回一个对象。
  更多资料:
  http://code.google.com/p/pldatabase/
  翻译自:
  http://iphonedevelopment.blogspot.com/2008/08/sqlite-persistent-objects.html
页: [1]
查看完整版本: SQLite Persistent Objects简化你的数据持久化工作