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

标签 sql scala lift mapper

我想找到一种简单的方法来访问 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/

相关文章:

c# - 数据库错误: "Could not find stored procedure ' sp_insert"

python - 如何在 SQLAlchemy 中将两列 ARRAY_AGG 合并为一项?

java - SBT 汇编在类文件中输出 0xEFBFBD 而不是 0xCAFEBABE

email - 提升邮件程序错误 : gnu. mail.handler.TextPlain 无法转换为 javax.activation.DataContentHandler

json - 用 1 个元素解析 Json 列表(Scala/liftweb)

sql - 在 SQL Server 中使用查询在 Base64 中哈希 MD5

scala - 无法读取 Parquet 支持的区分大小写的 Glue 表

scala - 是否有任何记录在案的函数式编程反模式?

scala - 开始使用 Lift 的最佳方式是什么?

sql - 选择与另一个日期最接近的日期