zoukankan      html  css  js  c++  java
  • 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/
    还可以去官网看
  • 相关阅读:
    c++中的explicit关键字
    数据结构简单要点总结(转)
    线程函数中访问成员变量的方法(转)
    C++中虚析构函数的作用(转)
    TransmitFile使用(发送文件)(转)
    静态分配和动态分配内存的区别(转)
    VC++ MFC 多线程及线程同步(转)
    CEdit & CRichEdit 使用技巧(转)
    memset用法详解(转)
    symbian 显示位图和SVG图(转)
  • 原文地址:https://www.cnblogs.com/zqr99/p/9414001.html
Copyright © 2011-2022 走看看