学习play_数据交互

来源:互联网 发布:mysql insert安装教程 编辑:程序博客网 时间:2024/06/07 11:56

前言:可能小弟说的很笼统,但~我尽量了,之前说了建立模型,控制层,页面(总结)

模型:模型需要继承importplay.db.jpa.Model;才能使用,对于字段查看hibernate注解进行验证或者说明映射数据库的字段

在play中,我不怎么建议采用以前java的驼峰命名法,而是统一的类名首字母大写,其余的小写,多个单词以下划线隔开(这不一定,你要用驼峰也行)

字段名称全部小写,多个单词下划线隔开   之所以用小写,下划线隔开,是为了更好的生成数据库,与数据库匹配,若是驼峰命名,就要写明一些字段对应的数据库字段名称

控制器:控制器需要继承importplay.mvc.Controller;所有的方法都是public static修饰的,对于传递参数用注解验证(请看hibernate注解)
跳转页面采用的是render(具体看上一节)、方法中操作数据库的SQL语句采用的是jpql语句,控制器命名是采用模型名称加下划线加c如:User_c

   

   试图:以前用的是jsp,现在在play中是html,但play更亲近程序员,直接写java代码都可以,只不过采用的是标签的形式,其次对于相同的布局/样式直接采用继承的形式达到引用的目的


开始:

访问后台

例如:去登录

在play中访问页面的方式有:

以路劲的形式写:如:'/User_c/login'这种方式,这种方式写必须在conf/routes中配置路径,访问某个方法

例子:index.html中<a href="/User_c/login">去登录</a>

    在routes中的配置:GET            /User_c/login                      User_c.login

    然后在User_c这个控制器中写方法:public static void login(){render();}

    在views目录下,新建一个文件夹名为User_c,再在User_c中新建login.html就跳转到login页面了

体会:总的来说,就是一个控制器(User_c)对应一个views中的文件夹(User_c)名称相同,跳转页面就是一个方法,什么都是方法!(可以方法名不同,在配置的时候自己配置)

如:去登陆路径是'/User_c/login'    然后routes中配置GET            /User_c/login                      User_c.index  这种,就是访问index,虽然你写的是login


以方法的形式访问:@{User_c.login()}这种方式就不用配置,直接访问到login方法,然后是跳转还是操作都可以

例子:index.html中<a href="@{User_c.login()}">去登录</a>

然后在User_c这个控制器中写方法:public static void login(){render();}

   在views目录下,新建一个文件夹名为User_c,再在User_c中新建login.html就跳转到login页面了

体会:其实还是hibernate那样,直接写路径就行,只不过这是写方法名称


数据操作:登录

在login.html中有个form

<form action="@{User_c.login()}">  

用户名:<input type="text" name="username">  

密码:<input type="password" name="password">   

 <input type="submit" value="提交">

 </form>

这种情况时,当你点击提交时就会访问你的User_c控制器中的login方法
如:User_c类中有   public static void login(String username,@Size(6,18)String password){   //这里进行数据操作  User user=User.find("byNameAndPwd",username,password).first();//查询是否有该用户   User user1=User.find("from User u where u.name="+username " and u.pwd="+password).first();//查询是否有该用户 }

在play中采用的是jpql语句,也就是上面的  

jpql语句分为:短语句,sql语句  

短语句:findAll();//查询全部  、find("byName",name).fetch();//根据名称查询  

sql语句:直接写from  实体类  条件,

具体的请看:http://blog.csdn.net/suncaishen/article/details/6279695

可能有的人认为我直接用方法那种不就行了吗,但是有的情况你还是会用到路径形式,例如:用layer插件弹出框时(我为了少写页面,添加,修改,查看都是用的layer插件的弹窗,而这是没办法写方法名的,所以要去配置)

上面的是查询(根据用户名、密码查询),增加就是hibernate的save()方法,不懂得可以百度下,这里我还是写下 例如:User实体类有两个字段:name,pwd  @Entity  public class User extends Model(){   public String name;   public String pwd;  }
add_user.html页面中 <form action="@{User_c.add_user()}" method="post"> 用户名:<input type="text" name="u.name"/> 密码:<input type="password" name="u.pwd"/> <input type="submit" value="提交"/> </form>
User_c控制层:   public class User_c extends controller{   public static void add_user(User user){   user.save();//这就是添加的方法了,很简单,与hibernate相同   index();//这是调用index方法   //render("/User_c/user-list.html");这是跳转页面   //renderJSON("true");//这是返回json数据,play可以直接返回boolean   }   }
User_c控制层:   public class User_c extends controller{    public static void add_user(User user){     user.save();//这就是添加的方法了,很简单,与hibernate相同     index();//这是调用index方法     //render("/User_c/user-list.html");这是跳转页面     //renderJSON("true");//这是返回json数据,play可以直接返回boolean    }     }
修改:user.name="aa";//这样就修改了删除:user.delete("id=+"id);//多看hibernate,就好然后记录下:实体类写的Date类型在自动生成数据库时会变成datetime,当我们在html中显示的时候,不想要后面的会用到?.format('yyyy-MM-dd')例如:${user.login_time?format('yyyy-MM-dd')}//得到登陆时间未完待续。。。

0 0
原创粉丝点击