CoreData 数据传输对象DTO(data transfer object)

来源:互联网 发布:山东体彩11选5遗漏数据 编辑:程序博客网 时间:2024/05/03 01:22

在这里以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.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>


@interface Department : NSManagedObject

@property (nonatomic, retain) NSString * deptName;
@property (nonatomic, retain) NSManagedObject *cmpy;

@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);
        }

    }
}

更多0

0 0
原创粉丝点击