05 データの取得

データを取得する時にはTSQuery, TSModelTableを使用します。

TSModelTableを使用せずに書くこともできますが、データ取得のコードを一カ所に集めることで再利用・メンテナンスがしやすくなるので推奨しています

TSModelTabeの継承

まず、TSModelTableの継承したクラスを作ります。

AppBookTable.h

#import <Foundation/Foundation.h>
#import "TSModelTable.h"
 
@interface AppBookTable : TSModelTable
 
@end

AppBookTable.m

#import "AppBookTable.h"
 
@implementation AppBookTable
 
-(NSString *)tableName{
   return @"book";
}
 
@end

必須なのはtableNameメソッドのみです。 このTableNameメソッドではテーブル名を返してください。

データを一つ取得する

TSModelTableクラスのqueryメソッドよりそのテーブル専用のTSQueryが取得できます。 データ取得の条件分として、addWhereメソッドを使うことでデータを絞り込みます。 データを一つだけ取得する場合、fetchOneを使用します。自動でlimit 1 が付加され、高速にデータを取得します。

AppBookTable.h

#import <Foundation/Foundation.h>
#import "TSModelTable.h"
 
@class AppBook;
 
@interface AppBookTable : TSModelTable
 
-(AppBook *)getOneByIndexNo:(NSNumber *)indexNo;
@end

AppBookTable.m

#import "AppBookTable.h"
#import "AppBook.h"
@implementation AppBookTable
 
-(NSString *)tableName{
   return @"book";
}
 
-(AppBook *)getOneByIndexNo:(NSNumber *)indexNo{
    TSQuery *query = [self query];
    [query addWhereWithKey:@"indexNo" value:indexNo];
    return [query fetchOne];
}
@end
AppBook *book = [[AppBookTable table] getOneByIndexNo:[NSNumber numberWithInt:1]];
// SQL : select * from book where `indexNo` = 1  limit 1 

データを複数取得する

複数取得する場合、fetchAllを使用します。 データはNSArrayにModelクラスが保持されている形で取得できます。

AppBookTable.h

#import <Foundation/Foundation.h>
#import "TSModelTable.h"
 
@class AppBook;
 
@interface AppBookTable : TSModelTable
 
-(AppBook *)getOneByIndexNo:(NSNumber *)indexNo;
-(NSArray *)getAllBooks;
-(NSArray *)getByAuthor:(NSString *)author;
@end

AppBookTable.m

#import "AppBookTable.h"
#import "AppBook.h"
@implementation AppBookTable
 
-(NSString *)tableName{
   return @"book";
}
 
-(AppBook *)getOneByIndexNo:(NSNumber *)indexNo{
    TSQuery *query = [self query];
    [query addWhereWithKey:@"indexNo" value:indexNo];
    return [query fetchOne];
}
 
-(NSArray *)getAllBooks{
    TSQuery *query = [self query];
    return [query fetchAll];
}
 
-(NSArray *)getByAuthor:(NSString *)author{
    TSQuery *query = [self query];
    [query addWhereWithKey:@"author" value:author];
    return [query fetchAll];
 
}
@end
NSArray *allBooks = [[AppBookTable table] getAllBooks];
// SQL : select * from book 
 
NSArray *wicketBooks = [[AppBookTable table] getByAuthor:@"wicket"];
// SQL : select * from book where `author` = 'wicket'