4
놀림과 함께 Play2를 사용하고 있습니다. 나는 어둠의 정신이 평범한 평원을 쓰고 있다고 생각합니다.많은 유사 DAO 방법이 있습니다. 맞나요?
그러나 나는 유사한 dao 방법을 많이 쓰고 있음을 빨리 알았다. 예를 들어 :
case class User(id:Pk[String], username:String, email:String, realname:String, city:String, website:String)
object User {
val simple = get[Pk[String]]("id") ~ get[String]("username") ~ ... get[String]("website") map {
case id ~ username ~ ... ~ website = User(id, username, ..., website)
}
def findByUsername(username:String) = DB.withConnection { implicit connection =>
SQL("select * from users where username={username}").on('username->username).as(simple.singleOpt)
}
def findByEmail(email:String) = DB.withConnection { implicit connection =>
SQL("select * from users where email={email}").on('email->email).as(simple.singleOpt)
}
def findById(id:String) = DB.withConnection { implicit connection =>
SQL("select * from users where id={id}").on('id->id).as(simple.singleOpt)
}
def findByRealname(keyword:String) = DB.withConnection { implicit connection =>
SQL("select * from users where realname like {keyword}").on('keyword->"%"+keyword+"%").as(simple *)
}
// more similar methods
}
이 방법은 where
절은 작은 차이가 거의 같은, 예외입니다. 그것은 작동
User.findWhere("id=?", id)
User.findWhere("username=?", username)
,하지만 난 그것을 anorm 권장 생각하지 않습니다
def findWhere(conditon, values:Any*) = ...
내가 행동을 호출 할 수 있습니다 :
그래서 나는 같은findWhere()
방법을 만들었습니다.
이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
SQL 문자열을 사용하지만 문자열을 작성하는 방법과 관련이 없습니다. 아니면 내가 너의 요점을 이해하지 못 하겠어! :) –