2014-07-08 5 views
1

는 (I 스칼라와 슬릭과 완전 초보자, 그래서 어떤 종류의 코드 리뷰에 감사드립니다) 내가 가지고있는 정의 class 및 슬릭 Table 다음테이블에서 호출 할 메소드는 어디에서 정의 할 수 있습니까?</p> <p>

case class Foo(title: String, description: String, id: Int = 0) 

class FooTable(tag: Tag) extends Table[Foo](tag, "FOO") { 

    def id = column[Int]("ID", O.PrimaryKey, O.AutoInc) 
    def title = column[String]("TITLE", O.NotNull) 
    def description = column[String]("DESCRIPTION") 

    def * = (title, description, id) <> (Foo.tupled, Foo.unapply) 
} 

내가 방법을 추가 할을 title과 일치하는 ListFoo입니다. 이런 식으로 뭔가 :

def findByTitle(title: String) = DB.withSession { implicit s: Session => 
    <FooTable TableQuery>.filter(_.title === title) 
} 

나는 다음과 같은 방법을 사용할 수있을 것입니다 :

val foos = TableQuery[FooTable] 
DB.withSession { implicit s: Session => 
    val anId = foos.findByTitle("bar") 
} 

방법/I 특정 Table에 대한 TableQuery에 따라 행동 할 수있는 방법을 추가 할 수있는? 신청서를 정리하는 것이 올바른 방법일까요?

답변

2
implicit class FooTableExtensions(q: Query[FooTable,Foo]){ 
    def findByTitle(t: String) = q.filter(_.title === t) 
} 

foos.findByTitle("Bar") 

Scala eXchange 2013 웹 사이트를 참조하십시오.

사전 컴파일 된 쿼리의 경우 미리 컴파일 된 쿼리를 캐시 할 수있는 DAO가 있으면 유용 할 수 있습니다. Scala Days 2013 talk를 참조하십시오. 이후 구문이 바뀌 었습니다. 설명서를 확인하십시오 Compiled.

+0

감사합니다. Re : Scala Days 2013, 당신은 Slick 대 ORM 토크를 의미합니까? – sjwarner

+0

예 Slick 대 ORM – cvogt

+0

내 아키텍처는 DAO 사용에 대한 다양한 출처의 조언 덕분에 발전했습니다. 나는 지금 다른 환경에서 같은 문제를 다루려고한다. http://stackoverflow.com/questions/24669616/where-to-put-my-database-access-methods-when-using-a-dao- with-slick-2-0. 시간이 있으면 당신의 도움에 감사드립니다! – sjwarner

1

내가 원하는 것은 DAO (데이터 액세스 개체)를 소개하는 것입니다. 사용자의 필요에 따라 FooTable 클래스의 동반자 개체를 코드베이스의 나머지 부분에서 FooTable.findByTitle()으로 전화를 걸 수있는 DAO가되게 할 수 있습니다.

+0

DAO에 대한 헤드 업을 보내 주셔서 감사합니다. 사용하는 데 몇 가지 이점 이상을 볼 수 있습니다. – sjwarner

+0

내 아키텍처는 DAO 사용에 대한 다양한 출처의 조언 덕분에 발전했습니다. 나는 지금 다른 환경에서 같은 문제를 다루려고한다. http://stackoverflow.com/questions/24669616/where-to-put-my-database-access-methods-when-using-a-dao- with-slick-2-0. 시간이 있으면 당신의 도움에 감사드립니다! – sjwarner