您的位置:首页 > 数据库 > MySQL

scala+play+slick + mysql

2016-07-10 09:20 465 查看
前提: 假设你配置好了scala,play的环境变量,如果这样都有问题,请自行Google,百度

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

[html] view
plain copy

 





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"  

)  

然后ctrl+D 停掉服务,输入play,再执行reload。让项目加载本次改动,引入相关依赖的jar包。
在项目根目录/conf/application.conf中,加入如下数据库连接信息内容

[html] view
plain copy

 





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"  

基本的配置信息到这就算完成了,接下来我们就要测试,整个环境是否有问题了。我选择的是plain SQL的方式(即原生sql的方式)
建一张数据库表来做测试,就叫帐号表,用户名,密码:

[sql] view
plain copy

 





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  

;  

在Scala中,建好实体,来做映射

[java] view
plain copy

 





case class Account(id : Int,username:String,password:String,isAdmin:Boolean)  

创建好数据库对象

[java] view
plain copy

 





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)  

  

  

}  

接下来,我们就操作编写一个数据库操作类

[java] view
plain copy

 





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()  

    }  

  }  

  

}  

然后我们再编写一个Controller进行验证,将结果打成Json,这样免得编写界面。

[java] view
plain copy

 





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")  

  }  

}  

然后在项目根目录/conf/routes中增加一个路由配置:

[html] view
plain copy

 





GET         /accounts              controllers.AccountController.listAll  

然后在命令行中执行play,再执行run.  在浏览器中输入:http://localhost:9000/accounts,整个Json串就打印出来了。说明整个环境是成功了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala