You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将现有Kotlin Exposed查询与原生SQL查询语句结合?

Kotlin Exposed:结合DSL查询与原生SQL条件

你可以通过Exposed提供的Op.build方法,直接将原生SQL条件与已构建的DSL查询结合,而非仅在代码层面过滤。以下是具体实现方式:

1. 构建查询时直接组合原生条件

在初始查询中,将DSL条件与原生SQL片段通过逻辑运算符(and/or)组合:

val query = PersonTable.select {
    (PersonTable.name eq "Napoleon") and 
    Op.build { "surname = 'Bonapart'" }
}

生成的SQL会自动将两个条件用AND连接,直接在数据库层面完成过滤。

2. 对已构建的Query追加原生条件

如果已经有现成的query对象,可以通过copy()方法修改其where子句来追加原生条件:

val baseQuery = PersonTable.select { PersonTable.name eq "Napoleon" }
val extendedQuery = baseQuery.copy(
    where = baseQuery.where?.and(Op.build { "surname = 'Bonapart'" }) 
        ?: Op.build { "surname = 'Bonapart'" }
)

这段代码会保留原查询的所有配置,仅追加新的原生条件(需处理原查询无where子句的情况)。

3. 安全处理动态参数(避免SQL注入)

如果原生条件包含动态输入值,务必使用参数化方式传递,不要直接拼接字符串:

val targetSurname = "Bonapart"
val query = PersonTable.select {
    (PersonTable.name eq "Napoleon") and
    Op.build { "surname = ?" } withArguments listOf(targetSurname)
}

withArguments方法会自动处理参数绑定,防止SQL注入风险。

内容的提问来源于stack exchange,提问作者VendettaBAH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:52:07