其实model在Paly框架的应用中是占据着中心位置的,它代表了对领域数据的操作信息。现在我们来看看一个具体的实例
public class User {
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
}
以上是我们在写一般的JavaBean时常用到的,属性设置成私有方法,然后再为每个属性设置getter和setter方法来操作这个属性。但是Play不是这么做的,请看下面代码
@Entity
public class User extends Model{
@Required
public String name;
}
显然,其属性是公有的,而且没有为属性设置操作方法,类前面加了个注解,并且继承了Model类。这样是不是很简洁并且更方便写呢!一般的方式是每个属性设为私有,然后配两个方法,且实现起来都一样,感觉有点枯燥。但是Play框架就不一样来了,在编译的时候,Model会自动为属性生成getter和setter方法,当你需要改变属性值时,直接调用属性就可以了。上面的代码在装载之后就变成下面的代码
@Entity
public class User extends Model{
@Required
public String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
}
当你这样写user.name=”Jim”,其实系统编译成user.setName(“Jim”); 但是注意,如果你没有显示重写操作方法,千万不能直接调用getter和setter方法,这样在编译的时候会报错。当然你也可以在Model里面去重写操作方法。Play会首先调用已有的操作方法,然后再自动生成。
数据持久化
将模型对象的数据储存在数据库里以持久化保持,Play提供了快速建立数据库的方法,你可以使用Mysql,Oracle,PostgreSQL等数据库,它们的驱动要放在lib文件夹下,然后在conf文件夹内的application.conf文件进行配置,包括db.url, db.driver, db.user,和db.pass
#If you need a full JDBC configuration use the following :
db.url=jdbc:postgresql:database_name
b.driver=org.postgresql.Driver
db.user=root
db.pass=secret
如果你是使用mysql数据库,那么直接添加一行# db=mysql://username:pw@localhost/db
在Play中提供了一个DB类,可以取得到java.sql.Connection
Connection conn=DB.getConnection();
Conn.createStatement().execute(“select * from users”);
Play中还可以通过play.db.jpa对象取到EntityManager,如:
EntityManager em=JPA.em();
em.persist(user);
em.createQuery(“from User where age >20”).getResultList();
模型Model中提供了很多直接操作对象的静态方法,比如find(),save(),delete()等,其他详细的可以在官方文档中找到。
为什么要保持Model无状态化?
Play是一个没有共享的框架,Java的对内存中也就没有存取变量。这样使得应用程序无状态化,这样就可以使得你的应用程序同时跑好多个服务器了。
但是问题又来了,如果你要再请求中共享数据怎么办?应用Play,你有三种办法可以解决这个问题。
第一, 如果你的数据不是很大,不超过4kb,就可以存放在session中,因为play的session是存放在cookie中的,而每个cookie存放的数据不能超过4kb,且只允许存放String对象
第二, 把数据持久化,比如存储到数据库中。
第三, 把数据临时持久化,比如存储到Cache中。其实Cache是一个不错的选择,存在服务端,而且多个服务器可以共享Cache。且比session安全性高。
public class User {
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
}
以上是我们在写一般的JavaBean时常用到的,属性设置成私有方法,然后再为每个属性设置getter和setter方法来操作这个属性。但是Play不是这么做的,请看下面代码
@Entity
public class User extends Model{
@Required
public String name;
}
显然,其属性是公有的,而且没有为属性设置操作方法,类前面加了个注解,并且继承了Model类。这样是不是很简洁并且更方便写呢!一般的方式是每个属性设为私有,然后配两个方法,且实现起来都一样,感觉有点枯燥。但是Play框架就不一样来了,在编译的时候,Model会自动为属性生成getter和setter方法,当你需要改变属性值时,直接调用属性就可以了。上面的代码在装载之后就变成下面的代码
@Entity
public class User extends Model{
@Required
public String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
}
当你这样写user.name=”Jim”,其实系统编译成user.setName(“Jim”); 但是注意,如果你没有显示重写操作方法,千万不能直接调用getter和setter方法,这样在编译的时候会报错。当然你也可以在Model里面去重写操作方法。Play会首先调用已有的操作方法,然后再自动生成。
数据持久化
将模型对象的数据储存在数据库里以持久化保持,Play提供了快速建立数据库的方法,你可以使用Mysql,Oracle,PostgreSQL等数据库,它们的驱动要放在lib文件夹下,然后在conf文件夹内的application.conf文件进行配置,包括db.url, db.driver, db.user,和db.pass
#If you need a full JDBC configuration use the following :
db.url=jdbc:postgresql:database_name
b.driver=org.postgresql.Driver
db.user=root
db.pass=secret
如果你是使用mysql数据库,那么直接添加一行# db=mysql://username:pw@localhost/db
在Play中提供了一个DB类,可以取得到java.sql.Connection
Connection conn=DB.getConnection();
Conn.createStatement().execute(“select * from users”);
Play中还可以通过play.db.jpa对象取到EntityManager,如:
EntityManager em=JPA.em();
em.persist(user);
em.createQuery(“from User where age >20”).getResultList();
模型Model中提供了很多直接操作对象的静态方法,比如find(),save(),delete()等,其他详细的可以在官方文档中找到。
为什么要保持Model无状态化?
Play是一个没有共享的框架,Java的对内存中也就没有存取变量。这样使得应用程序无状态化,这样就可以使得你的应用程序同时跑好多个服务器了。
但是问题又来了,如果你要再请求中共享数据怎么办?应用Play,你有三种办法可以解决这个问题。
第一, 如果你的数据不是很大,不超过4kb,就可以存放在session中,因为play的session是存放在cookie中的,而每个cookie存放的数据不能超过4kb,且只允许存放String对象
第二, 把数据持久化,比如存储到数据库中。
第三, 把数据临时持久化,比如存储到Cache中。其实Cache是一个不错的选择,存在服务端,而且多个服务器可以共享Cache。且比session安全性高。