+
Skip to content

为Table提供扩展以实现实体类查询api #387

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 20 commits into from

Conversation

ForteScarlet
Copy link

@ForteScarlet ForteScarlet commented Apr 18, 2022

Table 提供一个扩展类,并实现通过对应实体类来进行查询的API EntitySequence.filterByQuery.whereBy,例如:

interface Department : Entity<Department> {
   val id: Int
   var name: String
   var location: String
}

object Departments : ConditionalTable<Department>("t_department") {
   val id = int("id").primaryKey().bindTo { it.id }.conditionOn {  column, value -> // this: Department
     if (value != null) column eq value else column eq 1
   }
   val name = varchar("name").bindTo { it.name }.conditionNotNullOn { column, value -> // this: Department
     column like "%$value%"
   }
   val location = varchar("location").bindTo { it.location } // No conditions will be generated for this field(column)
}

// by EntitySequence
database.departments
    .filterBy(entity)
    // Other operations...
    .forEach {
        println(it)
    }
// by Query
database.from(Departments)
    .select()
    .whereBy(Departments, entity)
    // Other operations...
    .forEach {
        println(it)
    }

@vincentlauvlwj
Copy link
Member

首先感谢你的 PR,这个功能很有想法,在特定场景下确实能解决一些痛点,但我还是决定不合并,主要是处于以下考量:

  • 我认为做框架要有取舍,ktorm 核心库应该保证它的纯粹性,只需要提供基础的核心能力即可,扩展功能应该放在外部模块,不宜什么功能都往里面堆
  • 这个功能可以视为 ktorm 的外部扩展,并不影响 ktorm 的核心逻辑,也没有对 ktorm 核心库做任何的修改,我认为把它作为一个独立的工具进行发布即可,因此没有必要合并进来

@ForteScarlet
Copy link
Author

首先感谢你的 PR,这个功能很有想法,在特定场景下确实能解决一些痛点,但我还是决定不合并,主要是处于以下考量:

  • 我认为做框架要有取舍,ktorm 核心库应该保证它的纯粹性,只需要提供基础的核心能力即可,扩展功能应该放在外部模块,不宜什么功能都往里面堆
  • 这个功能可以视为 ktorm 的外部扩展,并不影响 ktorm 的核心逻辑,也没有对 ktorm 核心库做任何的修改,我认为把它作为一个独立的工具进行发布即可,因此没有必要合并进来

非常感谢您的答复。其实一开始确实是打算只作为独立工具使用的,但是部分逻辑可能涉及到了一些内部API,似乎无法直接的在第三方情况下应用。如果这样的话不知这类API是否会考虑公开或者提供类似功能的公开方法呢?印象中有比如根据Column获取具体实体类中对应属性值的方法之类的。

vincentlauvlwj added a commit that referenced this pull request Jun 3, 2022
@vincentlauvlwj
Copy link
Member

嗯,刚刚开放了几个内部 API 给外部扩展使用,会在 3.5.0 版本发布,你可以看一下 adaf213

@ForteScarlet
Copy link
Author

嗯,刚刚开放了几个内部 API 给外部扩展使用,会在 3.5.0 版本发布,你可以看一下 adaf213

好的~感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载