当前位置: 首页 > 知识库问答 >
问题:

静态编程语言公开的DSL查询映射

酆浩邈
2023-03-14

>

  • 如何将选择查询映射到类
  • 是否有任何@transactional操作来执行查询?

    object UserRepository {
    fun getAll() : List<User> {
       return User.selectAll().map { User } // how to add it in a transaction ? // Is it the right way to map query to a Class ?
    }
    
    fun get(id: Int) : User? {
        return User.select { User.id eq id id}.map { User.it } // Mapping Not working
    }
    
  • 共有3个答案

    顾跃
    2023-03-14

    我的解决方案是将值提取到HashMap中,并将pk作为值

        fun getRaw(): List<HashMap<String, Any?>> {
            return transaction {
                val list = Users.selectAll().toList()
    
                list.map { data ->
                    HashMap<String, Any?>().also { map ->
                        Users.columns.forEach {
                            if (data[it] is EntityID<*>) {
                                map[it.name] = (data[it] as EntityID<*>).value
                            } else {
                                map[it.name] = data[it]
                            }
                        }
                    }
                }
            }
        }
    
    卫俊誉
    2023-03-14

    映射应自动完成。请参阅文档:

    DAO文档

    DSL文档

    交易记录

    表格:

    object Users : IntIdTable() {
      val name = varchar("name", 50)
    }
    

    实体:

    class User(id: EntityID<Int>) : IntEntity(id) {
      companion object : IntEntityClass<User>(Users)
    
      var name     by Users.name
    }
    

    用法:

    fun getAllUsers(): List<User> {
      Database.connect(/* ... */)
      return transaction {
        User.all().toList()
      }
    }
    
    连志义
    2023-03-14

    我知道现在已经晚了,但对于其他有这个问题的人来说:如果您使用的是DSL,那么您可以在数据类中创建一个用于映射的函数。例如:

    data class User(
        val id: Int,
        val username: String,
        val password: String
    ) {
    
        companion object {
    
            fun fromRow(resultRow: ResultRow) = User(
                id = resultRow[UserTable.id].value,
                username= resultRow[UserTable.username],
                password = resultRow[UserTable.password]
            )
        }
    }
    

    在您的事务块中:

    transaction {
            user = UserTable.select { UserTable.id eq userId }.map { User.fromRow(it) }
        }
    
     类似资料:
    • 暴露0.27.1是否能够翻译以下SQL语句? 下面是我尝试的内容,但不幸的是,子查询独立于查询的其余部分工作。 此外,如果可能的话,那么如何使用别名从ResultRow获取结果?在这个示例之后,解决方案似乎是将整个子查询存储在单个变量中,并使用一个alias()方法调用,但这看起来很难看。有没有更好的方法?

    • 为了描述Gradle构建脚本,我们可以通过< code>build.gradle.kts文件使用Kotlin。在< code>dependencies和build 部分全局定义要使用的Kotlin版本是一个常见的问题(在给定的情况下使用不同的版本是相当罕见的)。 请考虑以下代码 (Gradle 4.3.1): 如您所见,kotlin(在本例中为1.2.30)定义了两次:和,它们通常没有区别。由于D

    • 我正在尝试使用Exposed on Kotlin编写CRUD服务。我有一张多对一的参考表。当我尝试插入时,我得到 Java语言lang.IllegalStateException:上下文中没有事务。 这是表和实体 下面是用于创建的服务方法 保存实体后调用toContact()方法时引发错误 var contact=contactEntity。toContact() 创建此类实体的正确方法是什么?

    • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

    • 我想从< code>local.properties文件中检索如下所示的密钥: 并通过gradle静态编程语言DSL将此值保存在我的中。稍后可以从我的项目中访问该字段。

    • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。