mysql set goal_OHMySQL - MySQL C API的一个Objective-C封装

OHMySQL

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e73766768747470733a2f2f696d672e736869656c64732e696f2f62616467652f706c6174666f726d2d696f732532302537432532306d61634f532d6c69676874677265792e737667badge.svg?sanitize=true

★★ Every star is appreciated! ★★

The library supports Objective-C and Swift, iOS and macOS. You can connect to your remote MySQL database using OHMySQL API. It allows you doing queries in easy and object-oriented way. Common queries such as SELECT, INSERT, DELETE, JOIN are wrapped by Objective-C code and you don't need to dive into MySQL C API.

Goal

If you are interested in and want to know how it can be applied in your project too.

Features

Easy to integrate and use

Many functionality features

Requires minimal knowledge in SQL

Supports iOS and macOS

Clean code with unit tests

Requirements

iOS 8.0+ / macOS 10.9+

Xcode 8.1+

How To Get Started

To test locally you can install MySQL or MAMP local server.

When it'll be ready then transfer your local Data Base(s) to remote MySQL server.

Installation

You can use CocoaPods. Add the following line to your Podfile:

pod 'OHMySQL'

If you are using Swift do not forget to add use_frameworks! at the top of Podfile. Add platform, example platform :osx, '10.10'.

Usage

At the first you need to connect to the database.

Objective-C version:

OHMySQLUser *user = [[OHMySQLUser alloc] initWithUserName:@"root"

password:@"root"

serverName:@"localhost"

dbName:@"sample"

port:3306

socket:@"/Applications/MAMP/tmp/mysql/mysql.sock"];

OHMySQLStoreCoordinator *coordinator = [[OHMySQLStoreCoordinator alloc] initWithUser:user];

[coordinator connect];

Swift version:

let user = OHMySQLUser(userName: "root", password: "root", serverName: "localhost", dbName: "ohmysql", port: 3306, socket: "/Applications/MAMP/tmp/mysql/mysql.sock")

let coordinator = OHMySQLStoreCoordinator(user: user!)

coordinator.encoding = .UTF8MB4

coordinator.connect()

To end a connection:

[coordinator disconnect];

coordinator.disconnect()

Query Context

To execute a query you have to create the context:

OHMySQLQueryContext *queryContext = [OHMySQLQueryContext new];

queryContext.storeCoordinator = coordinator;

let context = OHMySQLQueryContext()

context.storeCoordinator = coordinator

You will use this context to execute queries or manipulate the objects.

SELECT

The response contains array of dictionaries (like JSON).

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory SELECT:@"tasks" condition:nil];

NSError *error = nil;

NSArray *tasks = [queryContext executeQueryRequestAndFetchResult:query error:&error];

let query = OHMySQLQueryRequestFactory.select("tasks", condition: nil)

let response = try? OHMySQLContainer.shared.mainQueryContext?.executeQueryRequestAndFetchResult(query)

You will get a response like this:

[{ @"id": @1, @"name": @"Task name", @"description": @"Task description", @"status": [NSNull null] }]

INSERT

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory INSERT:@"tasks" set:@{ @"name": @"Something", @"desctiption": @"new task" }];

NSError error;

[queryContext executeQueryRequest:query error:&error];

let query = OHMySQLQueryRequestFactory.insert("tasks", set: ["name": "Something", "desctiption": "new task"])

try? mainQueryContext?.execute(query)

UPDATE

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory UPDATE:@"tasks" set:@{ @"name": @"Something", @"description": @"new task update" } condition:@"id=5"];

NSError error;

[queryContext executeQueryRequest:query error:&error];

let query = OHMySQLQueryRequestFactory.update("tasks", set: ["name": "Something"], condition: "id=7")

try? mainQueryContext?.execute(query)

DELETE

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory DELETE:@"tasks" condition:@"id=10"];

NSError error;

[queryContext executeQueryRequest:query error:&error];

let query = OHMySQLQueryRequestFactory.delete("tasks", condition: "id=10")

try? mainQueryContext?.execute(query)

JOINs

The response contains array of dictionaries (like JSON). You can do 4 types of joins (INNER, RIGHT, LEFT, FULL) using string constants.

OHMySQLQueryRequest *query = [OHMySQLQueryRequestFactory JOINType:OHJoinInnerfromTable:@"tasks"

columnNames:@[@"id", @"name", @"description"]

joinOn:@{ @"subtasks":@"tasks.id=subtasks.parentId" }];

NSArray *results = [queryContext executeQueryRequestAndFetchResult:query error:nil];

let query = OHMySQLQueryRequestFactory.joinType(OHJoinInner, fromTable: "tasks", columnNames: ["id", "name", "description"], joinOn: ["subtasks": "tasks.id=subtasks.parentId"])

let result = try? mainQueryContext?.executeQueryRequestAndFetchResult(query)

Object Mapping

You have to implement the protocol OHMappingProtocol for your models. Insertion looks like the following (in this example the NSManagedObject instance). The library has only a primary logic for mapping, so I would recommend you writing a mapping logic by yourself. If you are using Swift you cannot use fundamental number types (Int, Double), only NSNumber (due to run-time).

[queryContext insertObject:task];

BOOL result = [queryContext save:nil];

mainQueryContext?.insertObject(task)

try? mainQueryContext?.save()

You can update/delete the objects easily.

// You don't need to specify primary index here. It'll be update for you.

OHTask *task = [OHTask new];

task.name = @"Code cleanup";

task.taskDescription = @"Delete unused classes and files";

task.status = 0;

[queryContext updateObject:task];

...

task.name = @"Something";

task.status = 1;

[task update];

...

[queryContext deleteObject:task];

BOOL result = [queryContext save:nil];

let task = Task()

task.name = "sample"

mainQueryContext?.updateObject(task)

mainQueryContext?.deleteObject(task)

try? mainQueryContext?.save()

Communication

If you found a bug, have suggestions or need help, please, open an issue.

If you want to contribute, submit a pull request.

If you need help, write me oleg.oleksan@gmail.com.

Make me feel happier ;]

68747470733a2f2f7777772e70617970616c6f626a656374732e636f6d2f656e5f55532f692f62746e2f62746e5f646f6e61746543435f4c472e676966

License

OHMySQL is released under the MIT license. See LICENSE for details.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值