本文来自 http://fair-jm.iteye.com 转截请注明出处
slick是什么具体就不多说了 官网都有介绍 自己跟着文档学学就记记笔记 方便以后复习了~~
这边从sbt开始 到eclipse
先在目录中建立sbt项目的基本结构(也可以用sbt的插件)
手动的话 基本目录应该是这样的:
build.sbt lib project build.properties build.scala plugin.sbt project src main java resources scala test java resources scala target |
以上是完整的目录
当然也可以使用插件(比如sbteclipse-plugin) 全局插件的配置只需在你当前用户家目录(win下也一样)的.sbt的0.13(具体版本) 如果没有plugins文件夹就新建一个 然后放入plugin.sbt 里面填写插件 例如:
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")
就可以使用了(在sbt中运行eclipse 或eclipse with-source=true 可以将sbt项目转化为eclipse也可以使用的项目)
项目结构如下:
在build,sbt中添加依赖 内容如下:
name := "sclick_test" version := "1.0-SNAPSHOT" scalacOptions ++= Seq("-unchecked", "-deprecation") libraryDependencies ++= Seq( "mysql" % "mysql-connector-java" % "5.1.28", "com.typesafe.slick" %% "slick" % "2.0.0", "org.slf4j" % "slf4j-nop" % "1.6.4" )
这边使用mysql 就把mysql的包先导入 然后是slick的包和slf4j
然后是先得到实体 如果是已经有数据库了 那么直接用他的代码生成工具就可以了 格式如下:
Array(slickDriver, jdbcDriver, url, outputFolder, pkg)
)
这边给出我用mysql的代码:
package slick_test object model { def main(args:Array[String])={ scala.slick.model.codegen.SourceCodeGenerator.main( Array[String]("scala.slick.driver.MySQLDriver", "com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/test", "G:/scala_workspace/slick_test/src/main/scala", "slick_test") ) } }
会生成一个Tables的scala代码文件 可以直接使用
使用如下: 这里只做一个insert的代码(因为其他我还没看 没学嘛 QAQ)
def main(args:Array[String]):Unit={ Database.forURL(url="jdbc:mysql://localhost:3306/test", user="root", password="", driver="com.mysql.jdbc.Driver") withSession { implicit session => Tables.Person += new Tables.PersonRow(2,Some(23),Some("[email protected]"),Some("cc"),Some("1111")) } }
用Some是因为数据库中的属性是nullable的 ID如果是自动增长的 那么随便写(因为最后的语句中是不会insert id的 交给数据库自己处理) +=和insert方法一样
然后自己写实体也是可以的 但是挺麻烦的 还是用工具生成下比较方便
class Persons(tag: Tag) extends Table[(Int, Option[Int], Option[String], Option[String], Option[String])](tag, "person") { val id: Column[Int] = column[Int]("id", O.AutoInc, O.PrimaryKey) /** Database column age */ val age: Column[Option[Int]] = column[Option[Int]]("age") /** Database column email */ val email: Column[Option[String]] = column[Option[String]]("email") /** Database column name */ val name: Column[Option[String]] = column[Option[String]]("name") /** Database column phone */ val phone: Column[Option[String]] = column[Option[String]]("phone") // Every table needs a * projection with the same type as the table's type parameter def * = (id, age, email, name, phone) } val persons = TableQuery[Persons]
这边没有用PersonRow(工具会自动生成的) 直接用tuple就好了
进行插入操作和以上是一样的:
persons insert (2,Some(21),Some("[email protected]"),Some("cc"),Some("1111"))
最后注意一点 关于导包 进行+=操作需要导入相应数据库的slick的驱动包
笔者最开始用scala.slick.driver.JdbcDriver包爆出一堆异常(用代码生成器时Int/Integer找不到 手写时提示SQL语法有错误) 用什么数据库就导入相应slick的驱动包 切记
完整代码:
package slick_test //import scala.slick.jdbc.{GetResult, StaticQuery => Q} import scala.slick.jdbc.JdbcBackend.Database //import Q.interpolation import scala.slick.driver.MySQLDriver.simple._ object jdbc { def main(args:Array[String]):Unit={ Database.forURL(url="jdbc:mysql://localhost:3306/test", user="root", password="", driver="com.mysql.jdbc.Driver") withSession { implicit session => persons insert (2,Some(21),Some("[email protected]"),Some("cc"),Some("1111")) Tables.Person += new Tables.PersonRow(2,Some(23),Some("[email protected]"),Some("cc"),Some("1111")) } } class Persons(tag: Tag) extends Table[(Int, Option[Int], Option[String], Option[String], Option[String])](tag, "person") { val id: Column[Int] = column[Int]("id", O.AutoInc, O.PrimaryKey) /** Database column age */ val age: Column[Option[Int]] = column[Option[Int]]("age") /** Database column email */ val email: Column[Option[String]] = column[Option[String]]("email") /** Database column name */ val name: Column[Option[String]] = column[Option[String]]("name") /** Database column phone */ val phone: Column[Option[String]] = column[Option[String]]("phone") // Every table needs a * projection with the same type as the table's type parameter def * = (id, age, email, name, phone) } val persons = TableQuery[Persons] }