gpt4 book ai didi

sql - 加入 Liftweb 的复杂 SQL 查询

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

我想知道是否有办法在 Liftweb 中使用 Mapper 执行一些复杂的 SQL 查询。

事实上,我想做的是从数据库 Employes 和 Departments 执行 Join 查询,使用它们通过一对多关系链接的事实。
另一个例子也是受欢迎的。

提前致谢。

以下是更多详细信息:假设我有 2 个表:

Employee : birthday, department ID, salary
Department : department ID, budget, address

现在我想获取一个对象列表 Employee (用 Mapper 创建)有一个 salary > 10$和一个 department budget < 100$ .

当然,我的原始代码比这复杂得多,但我的目标是能够有一个映射对象列表(即 Employee )对应于它自己的表或链接表中的标准。

最佳答案

我查过这个。看起来好像连接是在对象层中完成的。

http://exploring.liftweb.net/master/index-8.html 推断你的情况:

// Accessing foreign objects  
class Employee extends LongKeyedMapper[Employee] with IdPK {
...
object department extends MappedLongForeignKey(this, Department)
def departmentName =
Text("My department is " + (department.obj.map(_.name.is) openOr "Unknown"))
}

class Department ... {
...
def entries = Employee.findAll(By(Employee.department, this.id))
}

如果你想做多对多映射,你需要提供你自己的
“加入”类,外键指向您的两个映射实体。
// DepartmentId Entity  
class DepartmentId extends LongKeyedMapper[DepartmentId] with IdPK {
def getSingleton = DepartmentId
object name extends MappedString(this,100)
}
object DepartmentId extends DepartmentId with LongKeyedMetaMapper[DepartmentId] {
override def fieldOrder = List(name)
}

接下来,我们定义我们的连接实体,如下所示。
它是一个 LongKeyedMapper 就像其他实体一样,
但它只包含其他实体的外键字段。
// Join Entity  
class DepartmentIdTag extends LongKeyedMapper[DepartmentIdTag] with IdPK {
def getSingleton = DepartmentIdTag
object departmentid extends MappedLongForeignKey(this,DepartmentId)
object Employee extends MappedLongForeignKey(this,Employee)
}
object DepartmentIdTag extends DepartmentIdTag with LongKeyedMetaMapper[DepartmentIdTag] {
def join (departmentid : DepartmentId, tx : Employee) =
this.create.departmentid(departmentid).Employee(tx).save
}

要使用连接实体,您需要创建一个新实例并设置
适当的外键指向关联的实例。如你所见,
我们在 Expense 元对象上定义了一个方便的方法来做到这一点。
为了使多对多作为我们实体上的一个字段可访问,我们可以使用
HasManyThrough trait,如下图
// HasManyThrough for Many-to-Many Relationships  
class Employee ... {
object departmentids extends HasManyThrough(this, DepartmentId,
DepartmentIdTag, DepartmentIdTag.departmentid, DepartmentIdTag.Employee)
}

关于sql - 加入 Liftweb 的复杂 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479615/

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