Play Framework之MVC之领域对象-模型

其实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安全性高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值