PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

चालाक 2.0 जेनेरिक सीआरयूडी संचालन

मैं इसे काम करने में कामयाब रहा, यह मेरी सामान्य विशेषता है:

import scala.slick.driver.PostgresDriver
import scala.slick.driver.PostgresDriver.simple._
import path.to.RichTable

trait PostgresGeneric[T <: RichTable[A], A] {

  val tableReference: TableQuery[T]

  def insert(row: T#TableElementType)(implicit s: Session) = 
    tableReference.insert(row)

  def insertAndGetId(row: T#TableElementType)(implicit s: Session) = 
    (tableReference returning tableReference.map(_.id)) += row

  def deleteById(id: Long)(implicit s: Session): Boolean = 
    tableReference.filter(_.id === id).delete == 1

  def updateById(id: Long, row: T#TableElementType)(implicit s: Session): Boolean = 
    tableReference.filter(_.id === id).update(row) == 1

  def selectById(id: Long)(implicit s: Session): Option[T#TableElementType] = 
    tableReference.filter(_.id === id).firstOption

  def existsById(id: Long)(implicit s: Session): Boolean = {
    (for {
      row <- tableReference
      if row.id === id
    } yield row).firstOption.isDefined
  }
}

जहां RichTable एक आईडी फ़ील्ड के साथ एक अमूर्त वर्ग है, यह ऊपरी बाउंड बाधा के साथ T#TableElementType का आईडी फ़ील्ड प्राप्त करने के लिए उपयोगी है (अधिक जानकारी के लिए इसे देखें):

import scala.slick.driver.PostgresDriver.simple._
import scala.slick.jdbc.{GetResult => GR}

abstract class RichTable[T](tag: Tag, name: String) extends Table[T](tag, name) {
  val id: Column[Long] = column[Long]("id", O.PrimaryKey, O.AutoInc)
}

और मेरी अभियान तालिका अब इस तरह दिखती है:

import scala.slick.driver.PostgresDriver.simple._
import scala.slick.jdbc.{GetResult => GR}
import scala.slick.lifted.TableQuery

case class CampaignRow(id: Long, name: Option[String])

class Campaign(tag: Tag) extends RichTable[CampaignRow](tag, "campaign") {
  def * = (id, name) <>(CampaignRow.tupled, CampaignRow.unapply)

  def ? = (id.?, name).shaped.<>({
    r => import r._; _1.map(_ => CampaignRow.tupled((_1.get, _2)))
  }, (_: Any) => throw new Exception("Inserting into ? projection not supported."))

  override val id: Column[Long] = column[Long]("id", O.AutoInc, O.PrimaryKey)
  val name: Column[Option[String]] = column[Option[String]]("name")
}

सामान्य विशेषता को लागू करने वाला मॉडल इस तरह दिखता है:

 object CampaignModel extends PostgresGeneric[Campaign, CampaignRow] {

   override val tableReference: PostgresDriver.simple.TableQuery[Tables.Campaign] = 
     TableQuery[Campaign]

   def insertCampaign(row: CampaignRow) = {
     insert(CampaignRow(0, "test"))
   }
 }



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL के लिए एक SOx अनुपालन चेकलिस्ट

  2. क्या PostgreSQL दो SQL सर्वर संग्रहीत प्रक्रियाओं के बीच जुड़ाव कर सकता है?

  3. jsonb बनाम jsonb[] एक ग्राहक के लिए एक से अधिक पतों के लिए

  4. पोस्टग्रेज में एक सरणी में चुनिंदा क्वेरी के आउटपुट को स्टोर करें

  5. Django और postgresql स्कीमा