在这里以DTO来描述,稍有欠缺,DTO的引用来源于DELPHI的remberobject (RO)三层。
是通过数据库结构生成的传输对象,即数据库类对象。
可以将DTO或类对象统一理解为内存数据操作对象即可。
在IOS中,IOS已集成好相应的工具直接生成数据库访问对象。
该例子基于我前面写好的文章来创建DTO的。
步骤:
一,在工程上右键选择新建-》选IOS中的COREDATA-》选中NSManagedObject subclass如图;
点击NEXT;
二,选中工程中的model文件,如图;
点击NEXT;
三,选择要生成DTO的实体,这里以前面建立好的company 和department进行演示;如图;
建立好之后将自动生成DTO类对象。
//
// Company.h
// coredatademo
//
// Created by f fsh on 12-10-20.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Department;
@interface Company : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *dept;
@end
@interface Company (CoreDataGeneratedAccessors)
- (void)addDeptObject:(Department *)value;
- (void)removeDeptObject:(Department *)value;
- (void)addDept:(NSSet *)values;
- (void)removeDept:(NSSet *)values;
@end
在这里看到dept为一个集合,因为COMPANY和DEPARTMENT的关系是一对多关系。
//
// Company.m
// coredatademo
//
// Created by f fsh on 12-10-20.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "Company.h"
#import "Department.h"
@implementation Company
@dynamic name;
@dynamic dept;
@end
//
// Department.m
// coredatademo
//
// Created by f fsh on 12-10-20.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "Department.h"
@implementation Department
@dynamic deptName;
@dynamic cmpy;
@end
对DTO的操作,其实在IOS中就是将NSMangedObject 对象转化为对应的DTO对象。操作上更符合面向对象。
插入数据
- (void) inserttestdata
{
//NSManagedObject * cmpy = [NSEntityDescription insertNewObjectForEntityForName:@"Company" inManagedObjectContext:self.managedObjectContext];
// cmpy.name = @"accesstor";//不使用DTO对象的操作。
Company *cmpy = [NSEntityDescription insertNewObjectForEntityForName:@"Company" inManagedObjectContext:self.managedObjectContext];
cmpy.name = @"accesstor"; //使用DTO对象进行处理。
Department *deptment = [NSEntityDescription insertNewObjectForEntityForName:@"Department" inManagedObjectContext:self.managedObjectContext];
deptment.deptName = @"department in company";
[cmpy addDeptObject:deptment];
[self.managedObjectContext save:nil];
}
查询数据
- (void) querytestData
{
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchreq = [[[NSFetchRequest alloc]init] autorelease];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Company" inManagedObjectContext:context];
[fetchreq setEntity:entity];
NSError *err;
NSArray *fetchedObjects = [context executeFetchRequest:fetchreq error:&err];
for (Company *company in fetchedObjects)
{
NSLog(@"company name is:%@",company.name);
for (Department * dp in company.dept) { // 遍历子表数据。
NSLog(@"depart name is:%@",dp.deptName);
}
}
}