当前位置: 首页 > 编程日记 > 正文

来玩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 configurationdb.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 {@Idpublic Integer id;public String name;// Querypublic 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快速教程”系列文章

相关文章:

mysql数据库之linux版本

http://repo.mysql.com/yum/mysql-5.6-community/ 安装 安装方式一(在线安装) # 查看和mysql…

LINUX UMASK详解

一 权限掩码umask umask是chmod配套的&#xff0c;总共为4位&#xff08;gid/uid,属主&#xff0c;组权&#xff0c;其它用户的权限&#xff09;,不过通常用到的是后3个&#xff0c;例如你用chmod 755 file&#xff08;此时这文件的权限是属主读(4)写(2)&#xff0b;执行(1),同…

ubuntu14.04安装hadoop2.6.0(伪分布模式)

版本&#xff1a;虚拟机下安装的ubuntu14.04&#xff08;64位&#xff09;,hadoop-2.6.0 下面是hadoop2.6.0的官方英文教程&#xff1a; http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Distributed_Operation hadoop下载…

Java项目:生活旅行分享平台(java+Springboot+JPA+Jsp+Html+js+Ajax+maven+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; 项目技术&#xff1a; Springboot SpringMVC JPA Jsp Htm…

Servlet和SpringMVC补课

1.web.xml加载顺序 http://mianhuaman.iteye.com/blog/1105522 关键点&#xff1a;ServletContext -> context-param -> listener -> filter -> servlet 2.beans xmlns http://www.w3school.com.cn/xml/xml_namespaces.asp 用于避免元素命名冲突。在Spring中应用极…

gdb debug

1. dir 添加源代码查找路径 一般工程的代码会有多路径&#xff0c;gdb会在当前目录下搜索符号对应的代码。利用dir <path> 可以添加代码搜索路径&#xff1b; 例如工程目录&#xff1a; ./ ./dir_1/ ./dir_2/ 可以用如下命令添加代码搜索路径&#xff1a; dir dir…

Java项目:嘟嘟图片展览馆管理系统(java+Springboot+SpringMVC+JPA+Jsp+maven+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; 项目技术&#xff1a; Springboot SpringMVC JPA Jsp Htm…

javascript编译与运行机理(1)--

随着学习js的深入就越想了解其内部的运行机理&#xff0c;看了很多文章&#xff0c;感觉下面总结的不错。但囿于个人水平&#xff0c;只是达到了理解层面&#xff0c;还不能提出自己的见解&#xff0c;只好把资料罗列出来&#xff0c;留待以后总结&#xff1a; 1、Javascript的…

Citrix Synergy 2014 重要信息快速一览

今天的互联网、社交媒体的确强大&#xff0c;我们可以足不出户了解到9600公里&#xff08;北京到LA的距离&#xff09;之外的美国发生的事情。今天从Brain Madden大神那儿又扒到了一些经过提炼的关于Citrix Synergy 2014&#xff08;Citrix每年一度的大会&#xff09;的会议内容…

stm32 flash和sram

FLASH是用来存储程序的&#xff0c;SRAM是用来存储程序运行中的中间变量转载于:https://www.cnblogs.com/CodeWorkerLiMing/p/10984065.html

常见主机字节序

常见主机字节序1&#xff0e; Little endian&#xff1a;将低序字节存储在起始地址2&#xff0e; Big endian&#xff1a;将高序字节存储在起始地址LE little-endian最符合人的 思维的字节序地址低位存储值的低位地址高位存储值的高位怎么讲是最符合人的思维的字节序&#xff0…

Java项目:仿小米电子产品售卖商城系统(java+SpringBoot+Vue+MySQL+Redis+ElementUI)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目描述&#xff1a;这是一个基于SpringBootVue框架开发的仿小米电子产品售卖商城系统。首先&#xff0c;这是一个前后端分离的项目&#xff0c;代码简洁规范&#xff0c;注释说明详细。其次&#xff0c;这…

在js中使用createElement创建HTML对象和元素

1.创建链接 <script language"javascript"> var o document.body; //创建链接 function createA(url,text) { var a document.createElement("a"); a.href url; a.innerHTML text; a.style.color "red"; o.appendChild(a); …

Leetcode | 3Sum

Given an array S of n integers, are there elements a, b, c in S such that a b c 0? Find all unique triplets in the array which gives the sum of zero. Note:Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)The solution set …

玩转 JavaScript 面试:何为函数式编程?

函数式编程在 JavaScript 领域着实已经成为一个热门话题。就在几年前&#xff0c;很多 JavaScript 程序员甚至都不知道啥是函数式编程&#xff0c;但是就在近三年里我看到过的每一个大型应用的代码库中都包含了函数式编程思想的大规模使用。 函数式编程(缩写为 FP)是一种通过组…

正则表达式分类 区别

原文地址&#xff1a;http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html 正则表达式&#xff1a;在计算机科学中&#xff0c;是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里&#xff0c;正则表达式通常被用…

Java项目:嘟嘟校园一卡通系统(java+JSP+Servlet+html+css+JavaScript+JQuery+Ajax+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a;卡管理&#xff0c;卡消费&#xff0c;卡充值&#xff0c;图书借阅&#xff0c;消费&#xff0c;记录&#xff0c;注销等等功能。 二、项目运行 环境配置&#xff1a; Jdk…

OC与C语言的区别

C语言是面向过程的编程语言&#xff0c;而OC则是面向对象的编程语言。面向对象:打个比方,就是你做一次菜,让老婆做个菜,吃饭,这就是面向对象,效率高面向过程,就是每一个细节:比如你要先把或开到合适的位置.然后还要洗菜 ,等油热了,才能开始炒菜,然后调料,...,起锅,到碗里,吃饭.…

Hutool之集合工具——CollectionUtil

为什么80%的码农都做不了架构师&#xff1f;>>> 集合工具 CollectionUtil 这个工具主要增加了对数组、集合类的操作。 1. join 方法 将集合转换为字符串&#xff0c;这个方法还是挺常用&#xff0c;是StrUtil.split的反方法。这个方法的参数支持各种类型对象的集合…

15:解决IntelliJ IDEA的乱码问题

1. -Dfile-encodingsUTF-8 &#xff0c;全局&#xff1a; 转载于:https://www.cnblogs.com/gzhbk/p/10991335.html

C++ 和C 语言混合代码导致的问题

C语言中操作字符串用C运行时函数&#xff1a;strtok, strcmp, strcpy等等&#xff0c;直接操作内存。在c引入的字符串操作类std:string &#xff0c;string类中必有一个私有成员&#xff0c;其是一个char*&#xff0c;用户记录从堆上分配内存的地址&#xff0c;其在构造时分配内…

SVN详细使用教程

SVN简介&#xff1a; 为什么要使用SVN&#xff1f; 程序员在编写程序的过程中&#xff0c;每个程序员都会生成很多不同的版本&#xff0c;这就需要程序员有效的管理代码&#xff0c;在需要的时候可以迅速&#xff0c;准确取出相应的版本。 Subversion是什么&#xff1f; 它是一…

Java项目:药店信息管理系统(java+SSM+JSP+layui+maven+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; 项目技术&#xff1a; JSP Spring SpringMVC MyBatis ht…

MongoDB简单操作

MongoDB简单操作 Hadoop核心技术厂商Cloudera将在2014/06推出hadoop Ecosystem与MongoDB的整合产品,届时MongoDB与ipmala及hbase,hive一起用; 开源linux领军企业RHEL也宣布RHEL将整合MongoDB用于简化用户账号管理与LDAP一起用; 数据仓库之MPP技术 领军者莫非 Vertica,exterdata…

Windows Presentation Foundation(介绍外连接)

Windows Presentation Foundation 2011/08/12更新&#xff1a;2010 年 12 月 Windows Presentation Foundation (WPF) 为开发人员提供了统一的编程模型&#xff0c;可用于构建合并了 UI、媒体和文档的丰富 Windows 智能客户端用户体验。 欢迎使用 WPF 了解 WPF&#xff1a; WP…

Linux中与进程终止相关的信号SIGTERM,SIGKILL,SIGINT

1. SIGTERM “kill pid” 会发送SIGTERM到进程pid. This is the termination signal sent by killcommand by default. 2. SIGINT 在终端中敲入interrupt key&#xff08;DELETE或ctrlc&#xff09;会产生SIGINT信号。这个信号会被发送到进程(inforeground proc…

Java项目:嘟嘟二手书商城系统(java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a; 主页显示商品&#xff1b; 所有二手书商品展示&#xff0c;可进行商品搜索&#xff1b; 点击商品进入商品详情页&#xff0c;具有立即购买和加入购物车功能&#xff0c;可增减…

SQL用法总结

1、创建数据库语句 create table persons(id INT NOT NULL AUTO_INCREMENT,lastname VARCHAR(255) NOT NULL,firstname VARCHAR(255) NOT NULL,PRIMARY KEY (ID)) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; 2、创建数据库时&#xff0c;PK、NN、UQ、BIN、UN、…

[leetcode] Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes values. For example:Given binary tree {1,#,2,3}, 1\2/3return [1,2,3]. Note: Recursive solution is trivial, could you do it iteratively? 给定一棵二叉树&#xff0c;使用非递归的方法进行先序遍历。…

error C2065: “M_PI”: 未声明的标识符

1.首先&#xff0c;程序中头文件的选择&#xff0c;要选择<math.h>头文件&#xff0c;在<cmath>文件中是没有对M_PI 的定义的&#xff08;现在的<cmath>中对M_PI好像已有定义&#xff09;。2.选择&#xff1a;项目——>”XXX属性"——>配置属性—…