我有一个案例类如下:
case class PowerPlantFilter(
powerPlantType: Option[PowerPlantType],
powerPlantName: Option[String],
orgName: Option[String],
page: Int,
onlyActive: Boolean
)
我的表映射如下所示:
class PowerPlantTable(tag: Tag) extends Table[PowerPlantRow](tag, "powerPlant") {
def id = column[Int]("powerPlantId", O.PrimaryKey)
def orgName = column[String]("orgName")
def isActive = column[Boolean]("isActive")
def minPower = column[Double]("minPower")
def maxPower = column[Double]("maxPower")
def powerRampRate = column[Option[Double]]("rampRate")
def rampRateSecs = column[Option[Long]]("rampRateSecs")
def powerPlantType= column[PowerPlantType]("powerPlantType")
def createdAt = column[DateTime]("createdAt")
def updatedAt = column[DateTime]("updatedAt")
def * = {
(id, orgName, isActive, minPower, maxPower,
powerRampRate, rampRateSecs, powerPlantType, createdAt, updatedAt) <>
(PowerPlantRow.tupled, PowerPlantRow.unapply)
}
}
我想查看过滤器并填充动态查询!另外,我想在生成的SQL类型中使用like语句 .
所以在我的情况下,我的PowerPlantFilter中的orgName应该检查是否存在,如果是,它应该在生成的SQL中生成一个like语句!
这是我的第一次尝试,但显然失败了!
val q4 = all.filter { powerPlantTable =>
List(
criteriaPowerPlantType.map(powerPlantTable.powerPlantType === _),
criteriaOrgName.map(powerPlantTable.orgName like s"%${criteriaOrgName}%") // fails to compile here!
).collect({case Some(criteria) => criteria}).reduceLeftOption(_ && _)
}
Slick中有没有内置的东西可以做到这一点?
1 回答
这就是我到达并且它有效,但不确定这是否有效:
但是当我检查生成的SQL查询时,我看到在数据库上执行的两个语句如下:
我该如何优化?