play教程 第八课 Model的用法 play中的JPA

来源:互联网 发布:mac os 下载地址 编辑:程序博客网 时间:2024/05/22 06:56

-Model层介绍

Model是MVC架构中的又一重量级概念,前文中我们已经讲过了Controller和View,接下来就讲一下这个Model。
Model层的作用这里再简单说一下。和其他框架一样,model层主要是用来做数据模型的,另外有几点特别要提一下

  • 实体类中的属性需要public修饰
  • 实体类不需要写get/set方法
  • 通常我们会在实体类中写数据库操作方法,也就是传统框架中的dao层

举个栗子:

@Entitypublic class Address extends Model{     public String address;     public String telephone;     public Long userid;     public String name;     public boolean del;     public Long cardid;     /**      * 查看收货地址是否已存在      * @param name      * @param address      * @return      */     public static boolean findByCondition(String name,String address){            int rows = Address. find("del=? and name=? and address=?", false,name,address).fetch().size();            if( rows>0){                 return true;           } else{                 return false;           }     }     /**      * 根据 userid查询      * @param userid      * @return      */     public static List<Address> findByUserid(Long userid){            return Address. find("del=? and userid=? order by id desc",false,userid).fetch();     }}

看到这里,一些老练的程序员会指出:“wrong!wrong!!wrong!!!我们不应该把属性设置成public,应该是private,这样才符合java的封装特性。”好吧,既然你想到了,那么Play肯定也想到了,事实上,play在后台是为这些属性做过处理的,已经处理成了private,并且为我们生成了set/get方法。为什么要这么做呢?原因只有一个,play在想尽一切办法帮我们提高开发效率,这种无聊的工作交给框架后台处理,我们应该专注做一些有价值的逻辑开发。

-启用数据库

在play中用“启用”这两个字比较贴切,因为他不需要什么加载驱动、创建链接之类的繁琐步骤,只需要在/conf/application.conf文件中配置一下就可以,而且这里的配置非常简单。下面我们介绍两种启用数据库的方法,均已mysql为例。

–第一种方法

# db=mem# To connect to a local MySQL5 database, use:# db=mysql://user:pwd@host/database

在application.conf文件中找到这样几行,把粗体的两行去掉“#”,然后在第二行写上我们自己使用的数据库信息
举个栗子

db=mem# To connect to a local MySQL5 database, use:db=mysql://root:123456@host/hellodb

–第二种方法

# If you need a full JDBC configuration use the following :# db.url=jdbc:postgresql:database_name# db.driver=org.postgresql.Driver# db.user=root# db.pass=secret

在application.conf文件中找到这样几行,把粗体的几行去掉“#”,同样,根据自己的实际情况,修改配置信息.
举个栗子

db.url=jdbc:mysql://localhost/hellodbdb.driver=com.mysql.jdbc.Driverdb.user=rootdb.pass=123456

-JPA的使用

JPA全称the Java Persistence API,也就是对数据库进行操作的数据模型实体类操作,是play中的一大利器,又帮我们减少了许多臃肿的代码。
正如本文第一个例子中那样,play中的实体类要继承Model类,并且要有@Entity注释。play中的JPA给我们带来多大的便利呢?

//增user.save();//删user.delete();//改user.email = “new@emailaddress.com”;user.save();//查User user = User.findById(1L);//查列表List<User> users = User.find(“admin = ?”, “true”).fetch();

怎么样,是不是很奇妙,很简单?It’s so easy.
再举个栗子。

    /**      * 添加地址      * @param address      * @param telephone      * @param name      * @param userid      */     public static void add(String address,String telephone,String name,Long userid){           Address addr = new Address();            addr. address = address;            addr. telephone = telephone;            addr. name = name;            addr. cardid = getCardid();            int flag = 0;            if(!Address. findByCondition(name, address)){                 flag = 1;           }            addr.save();           JSONArray result = JSONArray. fromObject(flag);            renderJSON(result);     }     /**      * 根据用户ID查出地址信息      * @param userid      */     public static void show(Long userid){           List<Address> addresses = Address.findByCardid(getCardid());           Map<String,Object> resultMap = convertToMap(addresses);            renderJSON(resultMap);     }     /**      * 删除收货地址      * @param addrid      */     public static void del(Long addrid,Long userid){           Address addr = Address. findById(addrid);            addr. del = true;            addr.save();     }
3 0