scala使用slick查詢的全過程(使用cass class)


1.

首先導包

<dependency>
<groupId>com.typesafe.slick</groupId>
<artifactId>slick_2.10</artifactId>
<version>3.1.1</version>
</dependency>
2.配置mysql application.conf
mip_common = {
url = "jdbc:mysql://${DB.MI.HOST}:${DB.MI.PORT}/${DB.MI.DB.COMMON}"
driver = com.mysql.jdbc.Driver
user = "${DB.MI.USER}"
password = "${DB.MI.PSWD}"
connectionPool = disabled
keepAliveConnection = true
}


3.創建class與表綁定

package com.you.model.mysql

import slick.driver.MySQLDriver.api._


object Campaign {

//表字段對應模版
case class CampaignModel(id: Long, version: Long, creation: String, lastModified: String, companyId: Option[Long], brand: Option[String], brandId: Option[Long]
, campaign: Option[String], beginDate: Option[String], endDate: Option[String], url: Option[String], removed: Int,
targetType: Option[String], adslotType: Option[String], deviceType: Option[String])

//表結構: 定義字段類型, * 代表結果集字段
  class CampaignTable(tag: Tag) extends Table[CampaignModel](tag, "campaign") {
def id = column[Long]("id")

def version = column[Long]("version")

def creation = column[String]("creation")

def lastModified = column[String]("last_modified")

def companyId = column[Option[Long]]("company_id")

def brand = column[Option[String]]("brand")

def brandId = column[Option[Long]]("brand_id")

def campaign = column[Option[String]]("campaign_name")

def beginDate = column[Option[String]]("begin_date")

def endDate = column[Option[String]]("end_date")

def url = column[Option[String]]("url")

def removed = column[Int]("removed")

def targetType = column[Option[String]]("target_type")

def adslotType = column[Option[String]]("adslot_type")

def deviceType = column[Option[String]]("device_type")

def * = (id, version, creation, lastModified, companyId, brand, brandId,
campaign, beginDate, endDate, url, removed,
targetType, adslotType, deviceType) <> (CampaignModel.tupled, CampaignModel.unapply)

}

//庫表實例
val q = TableQuery[CampaignTable]
}

4.編寫dao接口(必須使用Await.result否則查不出數據)


object CampaignDao {
def selectCampaignAndTracking(advertiseid: Long): Map[Long, CampaignAndTracking] = {
val db = Database.forConfig("mip_common")
val tuples: Seq[(Campaign.CampaignModel, Tracking.TrackingModel)] = Await.result(db.run(Campaign.q.join(Tracking.q)
.on(_.id === _.campaignId)
.filter { case (campaign, tracking) => campaign.companyId === advertiseid && campaign.removed === 0 && tracking.removed === false }
.result), Duration.Inf)
val value: Seq[(Long, CampaignAndTracking)] = tuples.map { case (campaign, tracking) => campaign.id -> CampaignAndTracking(campaign.id, campaign.brand, campaign.beginDate, campaign.endDate
, campaign.campaign, campaign.url, campaign.adslotType, campaign.targetType, tracking.landingpage, tracking.id, tracking.publisher, tracking.adslot,
tracking.creative, tracking.kpiType, tracking.kpiValue, campaign.deviceType, tracking.channel, tracking.adType, tracking.region, tracking.vertical)
}
value.toMap


}
}

當初看了幾篇比較好的博客:
https://blog.csdn.net/u012234115/article/details/78658625
https://www.cnblogs.com/tiger-xc/p/5898585.html
http://wiki.jikexueyuan.com/project/slick-guide/
還可以去官網看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM