[英]How to map a query result to case class using Anorm in scala
我有2個案例類,例如:
case class ClassTeacherWrapper(
success: Boolean,
classes: List[ClassTeacher]
)
第二個:
case class ClassTeacher(
clid: String,
name: String
)
和這樣的查詢:
val query =
SQL"""
SELECT
s.section_sk::text AS clid,
s.name AS name
from
********************
"""
出於安全考慮,我將*替換為查詢:
所以我的查詢返回2個值。 我如何將其映射到case class ClassTeacher
目前我正在做這樣的事情:
def getClassTeachersByInstructor(instructor: String, section: String): ClassTeacherWrapper = {
implicit var conn: Connection = null
try {
conn = datamartDatasourceConnectionPool.getDBConnection()
// Define query
val query =
SQL"""
SELECT
s.section_sk::text AS clid,
s.name AS name
********
"""
logger.info("Read from DB: " + query)
// create a List containing all the datasets from the resultset and return
new ClassTeacherWrapper(
success =true,
query.as(Macro.namedParser[ClassTeacher].*)
)
//Trying new approch
//val users = query.map(user => new ClassTeacherWrapper(true, user[Int]("clid"), user[String]("name")).tolist
}
catch {
case NonFatal(e) =>
logger.error("getGradebookScores: error getting/parsing data from DB", e)
throw e
}
}
我正在得到這個異常:
{
"error": "ERROR: operator does not exist: uuid = character varying\n
Hint: No operator matches the given name and argument type(s). You
might need to add explicit type casts.\n Position: 324"
}
任何人都可以幫我解決問題。 我是scala和Anorm的新手,我應該在query.as
修改什么作為代碼的一部分
您需要成功領域嗎? 通常,空列表就足夠了嗎?
我發現解析器非常有用(並且可重用),因此在ClassTeacher單例(或類似位置)中類似以下內容:
val fields = "s.section_sk::text AS clid, s.name"
val classTeacherP =
get[Int]("clid") ~
get[String]("name") map {
case clid ~ name =>
ClassTeacher(clid,name)
}
def allForInstructorSection(instructor: String, section: String):List[ClassTeacher] =
DB.withConnection { implicit c => //-- or injected db
SQL(s"""select $fields from ******""")
.on('instructor -> instructor, 'section -> section)
.as(classTeacherP *)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.