RepoDB 0.0.4

RepoDB 0.0.4

KirillBuyakov 维护。



 
依赖关系
GRDB.swift~> 4.14.0
RxSwift~> 5
RxCocoa~> 5
 

RepoDB 0.0.4

  • Kirill Buyakov

RepoDB

RepoDB 是一个基于 GRDB 和 RxSwift 的 SQLite 数据库框架

功能

  • 自动迁移
  • 获取/保存/更新/删除/存在/计数方法
  • 基于仓库模式与数据库交互
  • RxSwift 支持

版本

Swift 版本 RepoDB 版本
5.1 0.0
5.0 0.0

需求

iOS 10.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+ • Swift 5+ / Xcode 11.4+

安装

要使用 CocoaPods 将 RepoDB 集成到您的 Xcode 项目中,请将其指定在您的 Podfile

pod 'RepoDB', '~> 0.0'

使用方法

本仓库中RepoDB-Demo包提供了示例代码。

初始化数据库实体(表)

要创建数据库表,请使用与DatabaseEntity协议相匹配的结构。此结构的所有字段都必须是可选的。您可以通过定义静态属性databaseTableName来设置表名称。属性包装器(注解/属性)@PrimaryKeyColumn@TableColumn用于设置表列。@PrimaryKeyColumn包含如下参数:name(列名称)和autoincremented(自动增加下一个值)。使用@PrimaryKeyColumn将此字段设置为表的主键。@TableColumn包含如下参数:name(列名称)和nullable(是否可以为空)。使用@TableColumn将此字段设置为普通表列。

struct DatabasePost: DatabaseEntity {
    
    static var databaseTableName: String = "Posts"
    
    @PrimaryKeyColumn(name: "id", autoincremented: true)
    var id: Int64?
    
    @TableColumn(name: "text", nullable: false)
    var text: String?
    
    init() { }
}

初始化数据库和迁移

当启动应用程序以执行迁移时,调用方法并传递以下参数:migrationEntitiesTypes(数据库实体类型的数组),migrationsName(迁移名称)。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    AppDatabase.shared(mirgrationEntitiesTypes: [DatabasePost.self], migrationsName: "v1").setupDatabase(for: application)
    return true
}

数据库操作

要执行对数据库的查询,您需要创建一个符合DatabaseRepository协议的空协议,在关联类型中传递数据库实体,将使用该仓库进行操作。

protocol PostsRepository: DatabaseRepository where Entity == DatabasePost { }

为了使用操作实体的方法,创建一个符合创建协议的空类。

class PostsDataRepository: PostsRepository { }

在调用访问数据库方法的类中,创建一个仓库的实例

private let postRepository: some PostsRepository = PostsDataRepository()

您现在可以访问数据库查询方法,例如 findAll()save(object:)

func fetchPosts() -> [DatabasePost] {
    guard let posts = try? postRepository.findAll() else { return [] }
    return posts
}

func savePost(post: DatabasePost) -> [DatabasePost] {
    _ = try? postRepository.save(object: post)
    return fetchPosts()
}

所有数据库查询的描述

func find(byId id: Int64) throws -> Entity - 通过 id 返回数据库中的实体。

示例

var object = try? repository.find(byId: 1)

func find(filterKeys: [[String: DatabaseValueConvertible?]]) throws -> Entity - 返回指定字段值的数据库实体。

示例

var object = try? repository.find(filterKeys: [["id": "1"], ["text": "Test"]])

func findAll(filterKeys: [[String: DatabaseValueConvertible?]]?) throws -> [Entity] - 返回指定字段值数据库实体的数组。

示例

var objects = try? repository.findAll(filterKeys: [["text": "Test"]])

func findAll(page: Int, count: Int) throws -> DatabasePaginationEntity - 返回一个包含元数据和指定长度实体的分页模型。

示例

var paginationObject = try? repository.findAll(page: 2, count: 10)

func save(object: Entity) throws -> Entity - 将实体保存到数据库并返回保存的实体。

示例

var savedObject = try? repository.save(object: newObject)

func saveAll(objects: [Entity]) throws -> Entity - 将实体数组保存到数据库并返回存储的实体。

示例

var savedObjects = try? repository.saveAll(objects: newObjects)

func update(object: Entity) throws -> Entity - 更新数据库中的实体并返回更新的实体。

示例

var updateObject = try? repository.update(object: updateObject)

func updateAll(objects: [Entity]) throws -> [Entity] - 更新数据库中的实体数组并返回更新的实体。

示例

var updatedObjects = try? repository.updateAll(objects: updatedObjects)

func delete(byId id: Int64) throws - 从数据库中删除指定 id 的实体。

示例

try? repository.delete(byId: 1)

func delete(object: Entity) throws - 从数据库中删除指定的实体。

示例

try? repository.delete(object: deletedObject)

func deleteAll(objects: [Entity]) throws - 从数据库中删除指定实体数组。

示例

try? repository.deleteAll(objects: deletedObjects)

func exist(byId id: Int64) throws -> Bool - 返回数据库中指定 id 实体的存在状态。

示例

var isExist = try? repository.exist(byId: 1)

func exist(object: Entity) throws -> Bool - 返回数据库中指定实体的存在状态。

示例

var isExist = try? repository.exist(object: existObject)

func count() throws -> Int - 返回数据库中实体的数量。

示例

var count = try? repository.count()

贡献

  • 欢迎提交拉取请求。
  • 对于主要更改,请先打开一个问题来讨论您想要进行的更改。

许可

RepoDB 采用 MIT 许可发布。详细信息请参阅 LICENSE