Slick2 使用笔记(1)

本文来自 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也可以使用的项目)

项目结构如下:


Slick2 使用笔记(1)
 

在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

 

 

然后是先得到实体 如果是已经有数据库了 那么直接用他的代码生成工具就可以了 格式如下:

来自 <http://slick.typesafe.com/doc/2.0.0/code-generation.html> 写道
scala.slick.model.codegen.SourceCodeGenerator.main(
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]
}

 

你可能感兴趣的:(笔记)