來玩Play框架05 數據庫


作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!

 

數據庫是整個站點的數據儲藏室。用戶提交的數據可以存儲在數據庫中,以便未來使用。Play可以通過JDBC和數據庫通信。我講介紹Play和mysql數據庫的連接。 

Play 2.*版本的默認操作數據庫的方式是通過Ebean。Play提供Finder這一幫助類型,可以實現一些簡單的數據庫查詢。

 

數據庫准備

在mysql中增加數據庫testing。增加用戶"player",密碼為"player"。為用戶player增加適當的權限。

CREATE DATABASE testing DEFAULT CHARACTER SET utf8; CREATE USER 'player'@'localhost' IDENTIFIED BY 'player'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON testing.* TO 'player'@'localhost';

 

為了在Play中使用mysql數據庫,需要在conf/application.conf中增加設置:

# Database configuration

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://127.0.0.1:3306/testing"
db.default.user="player"
db.default.password="player"

# Ebean configuration
ebean.default="models.*"

 

還需要修改build.sbt為:

name := "test" version := "1.0-SNAPSHOT" libraryDependencies ++= Seq( javaJdbc, javaEbean, cache, "mysql" % "mysql-connector-java" % "5.1.18" ) play.Project.playJavaSettings

上面的改動完成后,使用play run來運行服務器。

 

創建模型

下面,我在模型中增加一個實體(entity),即一個Person類。放入models/Person.java

package models; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import play.db.ebean.Model; import play.db.ebean.Model.Finder; @Entity public class Person extends Model { @Id public Integer id; public String name; // Query
    public static Finder<Integer,Person> find = 
            new Finder<Integer,Person>(Integer.class, Person.class); public static List<Person> findAll() { return find.all(); } public static Person findByName (String name) { return find.where().eq("name", name).findUnique(); } }

Person類繼承自Model類,並有一個@Entity的注解,從而說明它是模型中的一個實體。實體有兩個場,整數的id和字符串的name,用來保存數據。

@id注解下,id將不為空,不重復,並自動增加。

Person還有一個靜態的場find。find是Play提供的Finder類型,用於數據庫查詢。而Person類中得findAll()和findByName()的靜態方法中,就調用了find,從而在數據庫中查詢條目。

 

Play有evolution模塊,管理數據庫的表。寫好Person.java后,訪問項目。Play這時會生成在mysql中建立表格的腳本。運行該腳本即可。

 

增加數據庫條目

增加一個動作。這個動作向數據庫增加條目:

 

public static Result addPerson() { Person p1 = new Person(); Person p2 = new Person(); p1.name = "vamei"; p2.name = "play"; p1.save(); p2.save(); return ok("Saved"); }

*** 上面的代碼要import models.Person

 

將/addPerson這一URL對應該動作。訪問后,數據庫將增加條目:

練習 根據表單一講的內容,增加一個向數據庫添加條目的表單。

 

數據庫查詢

我可以在動作中調用剛才定義的查詢方法findAll()和findByName(),比如增加allPerson()動作:

public static Result allPerson() { List<Person> persons = Person.findAll(); return ok(views.html.personList.render(persons)); }

上面查詢得到的Person類型的表,傳遞給模板views/personList.scala.html:

@(personList: List[models.Person]) <!DOCTYPE html>
<html>
  <body>
    <ul> @for(person <- personList) { <li>@person.name</li> } </ul>
  </body>
</html>

修改routes,增加對應的URL為/allPerson,頁面如下:

事實上,我也可以在動作中直接調用Person.find,來組成查詢語句。這將讓動作內部有更大的查詢自由度。比如上面的動作可以改寫成:

public static Result allPerson() { List<Person> persons = Person.find.all(); return ok(views.html.personList.render(persons)); }

 

總結

save()

Finder

 

歡迎繼續閱讀“Java快速教程”系列文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM