当前位置:K88软件开发文章中心编程语言SQLSlick → 文章内容

Slick 准备开发环境

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-19 4:47:23

由 小路依依 创建, 最后一次修改 2016-08-12 准备开发环境本篇介绍如果设置使用 Slick 的 Scala 开发环境,这里我们使用 SBT 命令行,SBT 使用的目录结构和 Maven 一样,我们可以创建一个目录,比如 Slick ,然后创建如下的缺省目录结构:srcmainjavaresourcesscalatestjavaresourcesscala因为我们打算使用 MySQL 数据库,并使用 Slick 来访问数据库,因此我们在 Slick 的根目录下创建一个 build.sbt,添加相关引用: name := "Scala Slick Examples"version := "1.0"scalaVersion := "2.10.4"libraryDependencies += "com.typesafe.slick" %% "slick" % "2.0.2"libraryDependencies += "org.slf4j" % "slf4j-nop" % "1.6.4"libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.18"Slick 使用 SLF4J 作为日志库文件。我们的 MySQL 数据库 Chinook 安装在本地服务器上面,我们在使用 Slick 可以手工创建数据库表 Schema 的定义,也可以使用自动代码生成工具从已有的数据库创建 Table 的 Schema 定义。我们在命令行输入 sbt,进入 SBT 控制台。然后我们使用 console,进入 Scala 控制台,注意此时 SBT 自动把 build.sbt 中引用到的库比如 slick, mysql 添加到 Scala 控制台,我们使用如下命令: scala.slick.model.codegen.SourceCodeGenerator.main( Array(slickDriver, jdbcDriver, url, outputFolder, pkg, user, password))相关参数如下: slickDriver Fully qualified name of Slick driver class, e.g. “scala.slick.driver.H2Driver”jdbcDriver Fully qualified name of jdbc driver class, e.g. “org.h2.Driver”url jdbc url, e.g. “jdbc:postgresql://localhost/test”outputFolder Place where the package folder structure should be putpkg Scala package the generated code should be places inuser database connection user namepassword database connection password 例如对于本例,我们使用 mysql 数据库,可以在命令行输入如下命令:注意修改你的用户名和密码: scala.slick.model.codegen.SourceCodeGenerator.main( Array("scala.slick.driver.MySQLDriver", "com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1/Chinook", "./src/main/scala", "com.guidebee.slick.example", "user", "password"))这样自动代码生成工具,就在 /src/main/scala 目录下生成了 Tables.scala 文件 package com.guidebee.slick.example// AUTO-GENERATED Slick data model/** Stand-alone Slick data model for immediate use */object Tables extends { val profile = scala.slick.driver.MySQLDriver} with Tables/** Slick data model trait for extension, choice of backend or usage in the cake pattern. (Make sure to initialize this late.) */trait Tables { val profile: scala.slick.driver.JdbcProfile import profile.simple._ import scala.slick.model.ForeignKeyAction // NOTE: GetResult mappers for plain SQL are only generated for tables where Slick knows how to map the types of all columns. import scala.slick.jdbc.{GetResult => GR} /** DDL for all tables. Call .create to execute. */ lazy val ddl = Album.ddl ++ Artist.ddl ++ Customer.ddl ++ Employee.ddl ++ Genre.ddl ++ Invoice.ddl ++ Invoiceline.ddl ++ Mediatype.ddl ++ Playlist.ddl ++ Playlisttrack.ddl ++ Track.ddl /** Entity class storing rows of table Album * @param albumid Database column AlbumId PrimaryKey * @param title Database column Title * @param artistid Database column ArtistId */ case class AlbumRow(albumid: Int, title: String, artistid: Int) /** GetResult implicit for fetching AlbumRow objects using plain SQL queries */ implicit def GetResultAlbumRow(implicit e0: GR[Int], e1: GR[String]): GR[AlbumRow] = GR{ prs => import prs._ AlbumRow.tupled((<<[Int], <<[String], <<[Int])) } /** Table description of table Album. Objects of this class serve as prototypes for rows in queries. */ class Album(tag: Tag) extends Table[AlbumRow](tag, "Album") { def * = (albumid, title, artistid) <> (AlbumRow.tupled, AlbumRow.unapply) /** Maps whole row to an option. Useful for outer joins. */ def ? = (albumid.?, title.?, artistid.?).shaped.<>({r=>import r._; _1.map(_=> AlbumRow.tupled((_1.get, _2.get, _3.get)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported.")) /** Database column AlbumId PrimaryKey */ val albumid: Column[Int] = column[Int]("AlbumId", O.PrimaryKey) /** Database column Title */ val title: Column[String] = column[String]("Title") /** Database column ArtistId */ val artistid: Column[Int] = column[Int]("ArtistId") /** Foreign key referencing Artist (database name FK_AlbumArtistId) */ lazy val artistFk = foreignKey("FK_AlbumArtistId", artistid, Artist)(r => r.artistid, onUpdate=ForeignKeyAction.NoAction, onDelete=ForeignKeyAction.NoAction) } /** Collection-like TableQuery object for table Album */ lazy val Album = new TableQuery(tag => new Album(tag)) /** Entity class storing rows of table Artist * @param artistid Database column ArtistId PrimaryKey * @param name Database column Name */ case class ArtistRow(artistid: Int, name: Option[String]) /** GetResult implicit for fetching ArtistRow objects using plain SQL queries */ implicit def GetResultArtistRow(implicit e0: GR[Int], e1: GR[Option[String]]): GR[ArtistRow] = GR{ prs => import prs

[1] [2] [3] [4] [5] [6]  下一页


Slick 准备开发环境