3

私はウェブアプリにリフト(素晴らしいです!)を使用していますが、何を使用するか混乱しています-スリックまたはマッパー。以前、アプリでマッパーを使用したことがあります。それはうまく機能しますが、1つの問題が見つかりました。存在する場合と存在しない場合がある複数のフィルターに基づいてデータベースにクエリを実行したいとします。それを行う方法がわかりませんでした。例えば。

class Gig extends LongKeyedMapper[Gig]{
  def primaryKeyField = id
  def getSingleton = Gig

  object id extends MappedLongIndex(this) {
    override def dbColumnName = "id"
    override def dbIndexed_? = true
  }

  object slug extends MappedString(this, 250) {
    override def dbColumnName = "slug"
    override def dbNotNull_? = true
  }

  object status extends MappedEnum(this, GigStatus) {
    override def dbColumnName = "status"
    override def dbIndexed_? = true
    override def targetSQLType(field: String) = Types.TINYINT
  }

  object title extends MappedString(this, 150) {
    override def dbColumnName = "title"
    override def uniqueFieldId = Full("gig_title")
    override def dbNotNull_? = true
    override def validations = valMinLen(5, "Please add a proper title.") _ :: valMaxLen(150, "Title can not exceed 150 characters") _ ::  super.validations
  }

  object description extends MappedText(this) with StringValidators{
    override def dbColumnName = "description"
    override def uniqueFieldId = Full("gig_desc")
    override def dbNotNull_? = true

    protected def valueTypeToBoxString(in: String): Box[String] = {
      Full(this.is)
    }

    protected def boxStrToValType(in: Box[String]): String = {
      in openOr null
    }

    def maxLen = 200
    override def validations = valMinLen(30, "Please add a proper description.") _ :: Nil
  }

  object locked extends MappedBoolean(this) {
    override def dbColumnName = "locked"
  }

  object amount extends MappedDouble(this) {
    override def dbColumnName = "amount"
    override def uniqueFieldId = Full("gig_amount")
    override def dbNotNull_? = true
  }

  object category extends MappedLongForeignKey(this, Category) {
    override def dbColumnName = "category"
    override def uniqueFieldId = Full("gig_category")
    override def dbNotNull_? = true

    override def validations = categoryExists _ :: super.validations

    def categoryExists(id: Long): List[FieldError] = {
      Category.findByKey(id) match {
        case Full(cat) => Nil
        case _ => List(FieldError(this, "Invalid category selected"))
      }
    }
  }

  object createdOn extends MappedDateTime(this) {
    override def dbColumnName = "created_on"
  }

  object updatedOn extends MappedDateTime(this) {
    override def dbColumnName = "updated_on"
  }

  object createdBy extends MappedLongForeignKey(this, User) {
    override def dbColumnName = "created_by"
  }

  object updatedBy extends MappedLongForeignKey(this, User) {
    override def dbColumnName = "updated_by"
  }

  def canApply: Boolean = {
    User.currentUser.map(user => user.provider_? && !user.id.is.equals(createdBy.is)) openOr false
  }

  def myUrl = "/gigs/"+id.is+"/"+slug.is

  def editUrl = "/gigs/"+id.is+"/edit"

  def unlockUrl = "/payment?id="+this.id.is+"&type=gig&action=unlock"

  def hasAnyBidsByUser(user: User): Boolean = {
    Bid.get(this, user).size match {
      case 0 => false
      case _  => true
    }
  }

  def locked_? = this.locked.is

  def bidsCount = Bid.getBidsCount(this)

  def isOwner(user: User): Boolean = user.id.is.equals(this.createdBy.is)
}

amount=10 で title = 'Sample' のギグをクエリしたいとします。どちらかが存在するか、どれも存在しない可能性があります。Javaで作業中に以前に休止状態を使用したとき、条件に基づいて条件に追加していました if amount!=null 条件に金額を追加し、 if title!=null 条件にタイトルを追加します。私はマッパーでネイティブSQLを使用してこれをfindAllByInsecureSql行いましたが、それが最善の方法であるかどうかはわかりません。

現在、リフトでスリックを試しています。それを機能させる方法に関するリソースが見つかりませんでした。何を使用すべきかについて、誰かが私を正しい方向に向けることができますか。マッパーまたはスリック、およびリフトとスリックを統合するための優れたリソース。

4

0 に答える 0