babyfish-ct / jimmer

A revolutionary ORM framework for both java and kotlin.
Apache License 2.0
725 stars 72 forks source link

”没有使用spring“按照文档中快速上手写的分页查询的createQuery类型不是KConfigurableRootQuery #492

Closed langbiantianya closed 5 months ago

langbiantianya commented 5 months ago

项目是基于ktor搭建的di使用的koin并没有使用spring,依赖配置使用文档中的gradle插件配置

plugins {
  kotlin("jvm") version "1.9.23"
  id("io.ktor.plugin") version "2.3.9"
  id("org.jetbrains.kotlin.plugin.serialization") version "1.9.23"
  // 从 Gradle 7.0 开始,可以使用 "latest.release" 代替具体的版本号,代表使用最新版本
  id("tech.argonariod.gradle-plugin-jimmer") version "latest.release"
  // 也可以使用 '+' 字符代表从 '+' 字符开始匹配最新的版本号
  // 添加ksp插件
  id("com.google.devtools.ksp") version "1.9.23+"
}
jimmer {
  // 设定 jimmer 依赖版本,此处也可以使用 "latest.release" 或 "0.+" 等版本范围表达式
  version = "latest.release"
  ormCompileOnly = true
  language = JimmerLanguage.KOTLIN
  client {
    enableEmbeddedSwaggerUi = true
    checkedException = true
  }
}

KSqlClient是这样创建的

val databases = module {
  single<HikariDataSource> {
    val hikariConf = get<Config>().hikari
    HikariDataSource().apply {
      username = hikariConf.username
      password = hikariConf.password
      jdbcUrl = hikariConf.jdbcUrl
      driverClassName = hikariConf.driverClassName
      isAutoCommit = hikariConf.isAutoCommit
      transactionIsolation = hikariConf.transactionIsolation
      validate()
    }
  }
  single<ConnectionManager> {
    ConnectionManager.simpleConnectionManager(get<HikariDataSource>())
  }
  single<KSqlClient> {
    newKSqlClient {
      setTriggerType(TriggerType.BOTH)
      setConnectionManager(get<ConnectionManager>())
    }
  }
}

实体类全部按照快速上手写的 调用的代码是这样的

import com.kxxnzstdsw.entity.*
import com.kxxnzstdsw.enums.Gender
import org.babyfish.jimmer.Page
import org.babyfish.jimmer.sql.fetcher.Fetcher
import org.babyfish.jimmer.sql.kt.KSqlClient
import org.babyfish.jimmer.sql.kt.ast.expression.`between?`
import org.babyfish.jimmer.sql.kt.ast.expression.`eq?`
import org.babyfish.jimmer.sql.kt.ast.expression.`ilike?`
import org.babyfish.jimmer.sql.kt.ast.expression.or
import java.math.BigDecimal

class BookRepository(override val sqlClient: KSqlClient) : BasicRepository {
  fun findBooks(

    pageIndex: Int, // 从0开始
    pageSize: Int = 10,

    fetcher: Fetcher<Book>? = null,

    sortCode: String = "name asc, edition desc",

    name: String? = null,
    minPrice: BigDecimal? = null,
    maxPrice: BigDecimal? = null,
    storeName: String? = null,
    storeWebsite: String? = null,
    authorName: String? = null,
    authorGender: Gender? = null
  ): Page<Book> =
    sqlClient
      .createQuery(Book::class) {
        where(table.name `ilike?` name)
        where(table.price.`between?`(minPrice, maxPrice))
        where(table.store.name `ilike?` storeName)
        where(table.store.website `ilike?` storeWebsite)
        where += table.authors {
          or(
            firstName `ilike?` authorName,
            lastName `ilike?` authorName
          )
        }
        where += table.authors { gender `eq?` authorGender }
      }
      .orderBy(table.makeOrders(sortCode))
      .select(
        table.fetch(fetcher)
      )
      .fetchPage(pageIndex, pageSize)
}

出现的问题如下图,我自己也翻了下源码但是能力有限找不到可以转换的方法 图片 图片

babyfish-ct commented 5 months ago

文档有细微错误,请把orderBy和select搬到花括弧内部。

langbiantianya commented 5 months ago

文档有细微错误,请把orderBy和select搬到花括弧内部。

thanks