首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBI和Kotlin映射

JDBI和Kotlin映射
EN

Stack Overflow用户
提问于 2022-08-31 14:13:35
回答 1查看 304关注 0票数 1

当我试图用用户名获取用户时,我得到了映射异常。//我不知道为什么堆栈溢出需要这么多非代码descriptions......................................................................................

代码语言:javascript
复制
Exception in thread "main" java.lang.IllegalArgumentException: Mapping Kotlin type User didn't find any columns matching required, non-default constructor parameters in result set
at org.jdbi.v3.core.kotlin.KotlinMapper.specialize$lambda-3(KotlinMapper.kt:72)
at java.base/java.util.Optional.orElseThrow(Optional.java:403)
at org.jdbi.v3.core.kotlin.KotlinMapper.specialize(KotlinMapper.kt:71)
at org.jdbi.v3.core.result.ResultSetResultIterator.<init>(ResultSetResultIterator.java:38)
at org.jdbi.v3.core.result.ResultIterable.lambda$of$0(ResultIterable.java:57)
at org.jdbi.v3.core.result.ResultIterable.one(ResultIterable.java:145)
at JdbiUserRepository.getById$lambda-1(Main.kt:75)
at org.jdbi.v3.core.Jdbi.withHandle(Jdbi.java:357)
at JdbiUserRepository.getById(Main.kt:70)
at MainKt.main(Main.kt:22)
at MainKt.main(Main.kt)

用户类:

代码语言:javascript
复制
data class User(val username: String, val password: String)

方法:

代码语言:javascript
复制
class JdbiUserRepository(private val jdbi: Jdbi) : UserRepository {

override fun getById(username: String): User? = jdbi
    .withHandle<User?, Exception> { handle -> handle
        .createQuery("select from users where username = :username")
        .bind("username", username)
        .mapTo<User>()
        .one()
    }
}

格莱德尔:

代码语言:javascript
复制
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
kotlin("jvm") version "1.7.10"
application
}

group = "org.example"
version = "1.0-SNAPSHOT"

repositories {
mavenCentral()
}

dependencies {
testImplementation(kotlin("test"))
implementation("org.jetbrains.kotlin:kotlin-reflect:1.7.10")
implementation("org.jdbi:jdbi3-core:3.32.0")
implementation("com.h2database:h2:1.4.200")
implementation("org.jdbi:jdbi3-kotlin:3.32.0")
implementation("org.jdbi:jdbi3-kotlin-sqlobject:3.32.0")
}

tasks.test {
useJUnitPlatform()
}

tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}

application {
mainClass.set("MainKt")
}

User表(sql脚本):

代码语言:javascript
复制
create table users (
username varchar primary key,
password varchar
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-31 17:30:11

我相信你的质疑是不正确的:

代码语言:javascript
复制
.createQuery("select from users where username = :username")

应该是

代码语言:javascript
复制
.createQuery("select username, password from users where username = :username")

文档

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73557267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档