基于 FMDB,十分方便、轻量的数据库组件,避免写 SQL 语句的烦恼
pod 'XQ_DAO', '1.5-light'
首先你得创建一个 User 实例
@interface User : NSObject <XQDBModel>
XQ_DB_PROPERTY
@property (copy, nonatomic) NSString *userName;
@property (copy, nonatomic) NSString *phone;
@property (strong, nonatomic) NSNumber *userId;
@property (strong, nonatomic) NSNumber *gender;
@property (copy, nonatomic) NSString *nick;
@property (copy, nonatomic) NSString *portrait;
@end
@implementation User
+ (void)load {
XQDBModelConfiguration *configuration = [XQDBModelConfiguration configuration];
[configuration addUniquesNotNull:@[PROP_TO_STRING(userId)]];
self.xq_modelConfiguration = configuration;
XQLog(@"[%@],[%@],[%@]",
[self xq_uniquesNotNull],
[self xq_notNullFields],
[self xq_uniquesAbleNull]);
}
@end
以上,就简单创建了一个 User 的 Entity,同时规定了 userId 字段是唯一并且不允许为 nil。 然后,在 AppDelegate 的 didFinishLaunch 方法中,调用下面的方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//...
[self.class setupDatabase];
return YES;
}
+ (void)setupDatabase {
XQMigrationService *migration = [XQMigrationService new];
/*
这创建 migration, migration 版本建议从1开始,这里表示是数据迁移的目标版本是 2
migration.version = 2; //target version
//db version 2
{
XQMigrationItemBase *migrationItem = [XQMigrationItemBase new];
//表示为 User 表添加一个 userName 字段,类型为 String
[migrationItem addField:@"userName" forTable:@"User" fieldType:FieldTypeString];
[migration addMigrationItem:migrationItem version:2];
}
*/
[[XQFMDBManager defaultManager] setupDatabaseWithClasses:@[@"User",
//@"Entity1",
//@"Entity2",
//...
]
migrationService:migration];
}
然后就可以使用 User 这个 entity 了:
User *user = [User new];
user.userId = @1;
user.nick = @"昵称";
user.userName = @"小明";
[user xq_save];
User *user = [User xq_queryMakeCondition:^(XQSQLCondition *condition) {
[condition andWhere:PROP_TO_STRING(userId) equal:@1];
}];
或者
NSArray<User *> *users = [User xq_queryModels];
NSMutableArray<User *> *users = [@[] mutableCopy];
for (NSUInteger idx = 0; idx < 5; ++idx) {
User *user = [User new];
user.nick = [NSString stringWithFormat:@"user_%@", @(self.datasource.count+1+idx)];
user.userId = @(idx+100); //特别地,如果不写这句,控制台会报出警告,因为 userId 是唯一并且不允许为 nil 的
[users addObject:user];
}
[User xq_saveObjectsInTransaction:users];
[User xq_clean];
[User xq_deleteWhere:PROP_TO_STRING(userId) equal:@1]
MIT