Play框架是我在spring之外接触的一个新的框架,这个框架基于scala语言,Scala也是运行在JVM上面的,他的字节码因此可以和Java互通,因此,即使完全不明白Scala也是可以使用这个框架进行开发的,但是坑的确多。
创建和导入
首先下载Play框架的SDK,直接去play官网下载就行,然后下载好了解压,路径填入系统的环境变量,都是常规操作,没啥说的,然后打开控制台或者终端输入play,如果出来了play的标志,就是装好了。
就像这样。
然后用new命令就可以初始化一个新的Play项目:
play new testapp
就像这样。
然后Play命令行会自动创建一堆东西,最终告诉你完事了,项目建好了,才怪,信他才有鬼呢。接下来需要进入工程的目录,执行play,play命令行初始化之后,我们需要使用eclipse命令把工程变成eclipse工程或是idea命令把它变成intellijIDEA的工程,到此为止,才算是真正配置好了一个新项目。
配置为IDEA项目
或者你可以使用eclipse
其实IDEA应该会更好些,因为他有Play框架的插件,操作起来跟舒服,如果使用Eclipse,那么我们需要额外配置Scala的插件,当然,这个插件里面有Play框架的支持,可以直接使用他操作play,如果是Eclipse的话,有可能是需要手动从控制台或者终端运行play的。
就像是这样:
在使用安装了Scala的Eclipse上面是可以导入Play工程的,但是,需要对play工程的一部分文件进行修改,否则Eclipse不认Play的Scala模板(*.scala.html文件),
在这个build.sbt中加入:
EclipseKeys.preTasks := Seq(compile in Compile)
然后进入project文件夹。
在project的plugins.sbt加入
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.1.0")
然后在工程的play控制台中执行Eclipse才可以。
至于idea嘛,装好Scala插件之后直接导入就ok,跟着向导走总能导进去。
play里面有几个比较常用的命令,可以直接在控制台中输入运行:
clean - 清除编译结果,下次运行重新编译全部。
play里面,尤其是表示UI的HTML模板,那是以Scala为基础的,还有一些其他的东西,如果他们的数量比较多,那么编译起来会很慢,非常慢,连续编译个30分钟都是没问题的。其实也并不是每次都这么慢,这是因为play会只去编译他认为发生了变化的部分源码,其余部分继续使用之前编译好的,所以会显得快一些。
但是这也常常带来一些问题,通常的解决方式就是clean之后重编一次.
compile 编译项目。
run 启动项目,启动后Ctrl + D可以结束项目返回控制台。
controller和路由
controller是控制器,Play里面控制器是Controller,继承他就可以得到控制器了,控制器里面可以定义各种方法,实例的,还有静态的(不是废话吗…)。
当然,这两个方式是有区别的,实例方法中,我们可以使用注解进行IoC注入,静态的当然是不行的。控制器中映射到URL,用于处理请求的方法被称为Action方法,路由就定义在routers文件中,这个文件在conf文件夹里面可以找到,同时这里也会有一个Application.conf是web应用的主配置文件,如果要连接个数据库什么的就要在这里配置。
routers文件遵循这个格式:
【HTTP方法】【URL路径】【@ 如果你的Action是实例方法,需要此符号作为前缀】【方法的全限定名】
最开始router中就给出了一个index作为例子。
IoC注入
我也没搞明白Play到底是要用Guice还是Spring,反正看他的buildPath里面是有spring的。
如果需要注入,直接使用inject注解就行,指定单例的是singleton,都是Java的标准注入注解,看那些就OK。
整合Hibernate启用JPA
修改conf文件夹内application.conf
db.default.driver=数据库驱动
db.default.url=JDBC的URL,要加双引号
db.default.jndiName=DefaultDS
db.default.user=数据库的用户名
db.default.password=数据库密码
jpa.default=defaultPersistenceUnit
在conf文件夹创建META-INF文件夹,编写persistance.xml
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1">
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<non-jta-data-source>DefaultDS</non-jta-data-source>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
工程下build.sbt的libraryDependencies内添加依赖:
javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"),
"mysql" % "mysql-connector-java" % "5.1.34",
"org.hibernate" % "hibernate-entitymanager" % "4.3.11.Final"
好了,JPA和hibernate已经可以使用了。
Play提供了一个JPA的类,这个类提供了很多操作方法,通过查阅相应的API很容易就能把JPA用起来。
(待续,想到了在写)