scala+play2.2.2+slick2.0.2 + mysql5.0整合之一---基础环境搭建篇

因为博主也没有折腾过play,slick这些玩意,这周的时候想折腾这么一套开发环境,于是就折腾了一番,终于还是成功了,于是把整个步骤都贴出来,与大家分享,期间踩过的坑,直接跳过。


前提: 假设你配置好了scala,play的环境变量,如果这样都有问题,请自行Google,百度


  1. 从命令行进入到你的工作目录(workspace),执行play new helloworld。等命令执行完,项目(helloworld)就创建成功了。关于项目的结构,也不多讲网上也有很多这样的文章。
  2. cd helloworld, 进入项目根目录,执行play,再执行idea,这个命令是生成导入idea开发工具所需要的文件和结构,然后可以用idea将项目导入了。
  3. 在项目根目录下执行 run, 把项目启动,在本地访问http://localhost:9000/。  看项目是否成功启动。那这样一个纯的play项目就跑起来了。
  4. 在项目根目录下的build.sbt中,加入slick和mysql驱动。
    libraryDependencies ++= Seq(
      jdbc,
      anorm,
      cache,
      "mysql" % "mysql-connector-java" % "5.1.18",
      "com.typesafe.slick" %% "slick" % "2.0.2",
      "org.slf4j" % "slf4j-nop" % "1.6.4"
    )
    

  5. 然后ctrl+D 停掉服务,输入play,再执行reload。让项目加载本次改动,引入相关依赖的jar包。
  6. 在项目根目录/conf/application.conf中,加入如下数据库连接信息内容
    db.default.driver=com.mysql.jdbc.Driver
    db.default.url="jdbc:mysql://172.16.0.90:3306/test?characterEncoding=UTF-8"
    db.default.user="root"
    db.default.password="root"

  7. 基本的配置信息到这就算完成了,接下来我们就要测试,整个环境是否有问题了。我选择的是plain SQL的方式(即原生sql的方式)
  8. 建一张数据库表来做测试,就叫帐号表,用户名,密码:
    CREATE TABLE `T_ACCOUNT` (
    `id`  int(11) NOT NULL AUTO_INCREMENT ,
    `username`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    `password`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    `isAdmin`  int(11) NULL DEFAULT NULL ,
    PRIMARY KEY (`id`)
    )
    ENGINE=InnoDB
    DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
    AUTO_INCREMENT=4
    ROW_FORMAT=COMPACT
    ;
    

  9. 在Scala中,建好实体,来做映射
    case class Account(id : Int,username:String,password:String,isAdmin:Boolean)

  10. 创建好数据库对象
    package models
    
    /**
     * Created by Administrator on 2014/8/11.
     */
    
    import scala.slick.jdbc.JdbcBackend.Database
    import play.api.Play.current
    
    object MyDatabase {
    
    
      /**
       * init configuration from application.conf.
       * <b>Only user in play Application</b>
       */
      private val conf = current.configuration
    
      private val dbUrl = conf.getString("db.default.url").getOrElse("")
    
      private val user = conf.getString("db.default.user").getOrElse("root")
    
      private val pwd = conf.getString("db.default.password").getOrElse("root")
    
      private val driverClass = conf.getString("db.default.driver").getOrElse("com.mysql.jdbc.Driver")
    
      /**
       * create the database instance  with configuration
       */
      val database = Database.forURL(dbUrl, user, pwd, driver = driverClass)
    
    
    }
    

  11. 接下来,我们就操作编写一个数据库操作类
    object Account{
    
      private val mdb = MyDatabase.database
    
    val resultParser = GetResult[Account](r => Account(r.<<, r.<<, r.<<, r.<<))
    
     def allAccounts():Seq[Account]={
       val sql= "select * from t_account"
        mdb.withSession{
          implicit session=>
            StaticQuery.queryNA[Account](sql).list()
        }
      }
    
    }

  12. 然后我们再编写一个Controller进行验证,将结果打成Json,这样免得编写界面。
    package controllers
    
    import play.api.mvc.Controller
    import models.Account
    import play.api.mvc.Action
    import play.api.libs.json._
    
    /**
     * Created by Administrator on 2014/8/11.
     */
    object AccountController extends Controller {
    
      implicit val AccountFormat = Json.format[Account]
    
      def listAll = Action {
        implicit request =>
          val list = Account.allAccounts
          val json = Json.toJson(list)
          Ok(json).as("application/json")
      }
    }
    

  13. 然后在项目根目录/conf/routes中增加一个路由配置:
    GET         /accounts              controllers.AccountController.listAll

  14. 然后在命令行中执行play,再执行run.  在浏览器中输入:http://localhost:9000/accounts,整个Json串就打印出来了。说明整个环境是成功了。


整个过程中主要有以下几点感悟:
  1. 对于新技术,以前完全没有接触过的东西,不要有畏难心理,用心一定可以搞定。
  2. 善用身边的资源,整个过程中向身边的朋友请教了不少东西,用好Google。
  3. scala的版本问题,真是一个大问题,发展太快。 所以框架选型的时候,一定要先搞清楚版本,要不然会被版本问题搞死搞残。


接下来的一篇,将会分享一下整个项目的改善篇,主要是数据库操作那一层。
 

你可能感兴趣的:(scala,play,slick)