gpt4 book ai didi

sql - Liftweb - 使用映射器获取 SQL 表字段的最大值

转载 作者:行者123 更新时间:2023-12-03 03:58:35 25 4
gpt4 key购买 nike

我想找到一种简单的方法来访问 liftweb 中映射元素的最大值,这是我实际所做的示例:

映射器部分

class MappedEntity extends LongKeyedMapper[MappedEntity] with IdPK {
def getSingleton = MappedEntity
object targetRaw extends MappedInt(this)
}

object MappedEntity extends MappedEntity with LongKeyedMetaMapper[MappedEntity]

搜索部分

val max = MappedEntity.findAllByInsecureSql(
"SELECT MAX (targetRaw) AS targetRaw FROM MappedEntity",
IHaveValidatedThisSQL("chris", "2011,11,14")
).head.targetRaw.get

假设我使用名为 MappedEntity 的 SQL 表,我希望 max 包含一个 string 或一个 int,等于targetRaw

中包含的最大值

如果您有任何建议或任何问题,我将很乐意为您提供帮助。

最佳答案

我不相信 lift-mapper 有运行此查询的内置方式。事实上,它对任何类型的聚合函数都非常缺乏。我看到的都是some count methods .

The find* methods仅适合返回 Mapper 类型的对象,正如您可以通过它们的返回类型看到的那样。

鉴于目前的 Lift 中没有很好的方法来做到这一点,您有多种选择可供选择。

  1. 使用lift-squeryl-record而不是电梯映射器。 Squeryl是一个更完整的ORM,并且支持group and aggregate functions .

  2. 创建您自己的特征,将 max 函数添加到 MetaMapper。这需要一些工作,但您可以使用 the implementation of count作为指导。

    • 从技术上讲,可能有一个更通用的实现来处理所有聚合函数(最大值、最小值、总和、计数……)。这可能就是我们业内所说的“矫枉过正”。
  3. 只需编写一些 SQL 即可。 Lift 提供了一种贷款模式方式来获取数据库连接。它还具有贷款模式帮助程序,用于准备语句和执行查询,以便在您完成后所有内容都会自动关闭。

    DB.use(DefaultConnectionIdentifier) { conn =>
    // execute query
    }
  4. 找到具有您要查找的值的对象,然后检索该字段。其明显的缺点是丑陋、缓慢且脆弱。

    val max: Option[String] = MappedEntity.findAll(
    BySql("targetRaw IN (SELECT MAX (targetRaw) FROM MappedEntity)",
    IHaveValidatedThisSQL("chris", "2011,11,14")).map(_.targetRaw.is).headOption

关于sql - Liftweb - 使用映射器获取 SQL 表字段的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9164945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com