在web项目中,通常需要持久化数据,而这些数据都是存放在数据库里面的,跟很多开源框架一样,playframework也提供了连接数据库的方法!
Play可以连接任何JDBC兼容的数据库,只需要将相应的驱动类库添加到/lib目录中,并在conf/application.conf文件中定义JDBC配置:
db.url=jdbc:mysql://localhost:端口号/库名
db.driver=com.mysql.jdbc.Driver
db.user=root
db.pass=123456
还可以在conf/application.conf文件中用配置选项指定JPA方言:
jpa.dialect=<dialect>
Play框架集成了H2数据库和MySQL数据库的驱动程序,存放在$PLAY_HOME/framework/lib/目录下。如果需要使用PostgreSQL,Oracle或者其他数据库,需要在该目录(或者应用程序的lib/目录)下添加相应的数据库驱动。
下面以连接MySql数据库为例:
在conf/application.conf文件中定义JDBC配置:
创建web工程后conf/application.conf里面就有默认的,可以直接在这里修改成上图所示:
db.default.url=jdbc:mysql://localhost:3306/mybatis
db.default.driver=com.mysql.jdbc.Driver
db.default.user=root
db.default.pass=root
Application.java(User是对应数据库表的一个实体类):
package controllers;
import play.*;
import play.mvc.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import models.*;
import play.data.validation.*;
import play.db.DB;
public class Application extends Controller {
public static void index() {
render();
}
/**
* 记得加上import play.data.validation.*。
* @Required告诉Play自动检查myName字段是否填写。
* 如果验证失败,我们加入一条消息到flash scope中并重定向到index动作。
* flash scope允许在重定向时保持消息。
*/
public static void sayHello(@Required String myName) {
System.out.println(myName);
if (validation.hasErrors()) {
flash.error("please enter your name!");
index();
}
List<User> listitems = new ArrayList<User>();
try {
Connection conn = DB.getConnection();
conn.createStatement().execute("select * from user");
ResultSet resultSet = conn.createStatement().executeQuery("select * from user");
while(resultSet.next()){
User user = new User();
user.setId(resultSet.getLong("id"));
user.setBirthday(resultSet.getDate("birthday"));
user.setPhoto(resultSet.getString("photo"));
user.setUpass(resultSet.getString("upass"));
user.setUserAddress(resultSet.getString("userAddress"));
user.setUserAge(resultSet.getInt("userAge"));
user.setUserName(resultSet.getString("userName"));
System.out.println(user.toString());
listitems.add(user);
}
System.out.println("连接数据库成功");
} catch (SQLException e) {
System.out.println("连接数据库失败");
e.printStackTrace();
}
renderArgs.put("listitems", listitems);
renderArgs.put("myName", myName);
render();
}
}
sayHello.html:
#{extends 'main.html' /}
#{set title:'Home' /}
<h1>你好 ${myName}</h1>
<table border="1" style="width: 50%">
<tr>
<th>姓名</th>
<th>年龄</th>
<th>地址</th>
</tr>
#{list items:listitems, as:'user'}
<tr>
<td>${user.userName}</td>
<td>${user.userAge}</td>
<td>${user.userAddress}</td>
</tr>
#{/list}
</table>
<a href="@{Application.index()}">Back</a>
显示效果:
注意:Application.java里面的System.out.println打印的消息并没有打印在myeclipse的控制台上,而是在dos窗口里面: