`

Play framework 2.0 -访问SQL数据库

 
阅读更多

 

#访问Sql数据库

 

1.配置JDBC连接池

 

play2.0提供了管理JDBC连接池的插件。你可以安装需要来配置许多数据库。

要启用数据库插件,就要在conf/application.conf文件中配置一个连接池。根据约定默认的JDBC数据源,必须调用缺省:

# Default database configuration
	db.default.driver=org.h2.Driver
	db.default.url="jdbc:h2:mem:play"

 

配置多个数据源:

# Orders database
db.orders.driver=org.h2.Driver
db.orders.url="jdbc:h2:mem:orders"

# Customers database
db.customers.driver=org.h2.Driver
db.customers.url="jdbc:h2:mem:customers"

 

如果有地方配置不对,在浏览器中会直接给你提示。

 

2.访问JDBC数据源

 

play.db包提供了对数据源的访问:

import play.db.*;

DataSource ds = DB.getDatasource();
 

 

3.获取JDBC连接

 

通过如下方式得到一个JDBC连接:

 

 

Connection connection = DB.getConnection();

 

 

4.通过JNDI暴露数据源

 

一下库期望从JNDI获取到数据源的引用,通过在conf/application.conf中加入下面的配置,你可以使用JDNI暴露任意Play管理的数据源。

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
db.default.jndiName=DefaultDS
 

 

5.引入数据库驱动

 

除了主要用于开发模式下的h2内存数据库外,Play没有提供其他数据库的驱动。所以,要部署到生产环境,你得添加你的数据库驱动作为应用的依赖。

举个例子,如果你使用mysql5数据库,你需要为连接添加这样的依赖:

 

 

val appDependencies = Seq(
     // Add your project dependencies here,
     ...
     "mysql" % "mysql-connector-java" % "5.1.18"
     ...
)
 

 

 

#使用Ebean ORM

 

1.配置Ebean

 

Play2.0有一个Ebean ORM(对象关系映射)的新特性。在conf/applicatio.conf中加如下的一行代码就可以启用它:

ebean.default="models.*"
 

 

它定义了一个默认的Ebean服务,使用默认的数据源,数据源必须正确的配置。你需要多少完全可以创建多少个Ebean服务。

只需要显示地定义每个服务映射的类:

ebean.orders="models.Order,models.OrderItem"
ebean.customers="models.Customer,models.Address"
 

这个例子中,我们设置了连个Ebean服务。

 

2.使用play.db.eban.Model超类

 

play2.0为你的Ebean模型类定义了一个方便的超类,这是Play2.0中一个典型的Ebean类:

	package models;

	import java.util.*;
	import javax.persistence.*;

	import play.db.ebean.*;
	import play.data.format.*;
	import play.data.validation.*;

	@Entity 
	public class Task extends Model {

	  @Id
	  @Constraints.Min(10)
	  public Long id;
	  
	  @Constraints.Required
	  public String name;
	  
	  public boolean done;
	  
	  @Formats.DateTime(pattern="dd/MM/yyyy")
	  public Date dueDate = new Date();
	  
	  public static Finder<Long,Task> find = new Finder<Long,Task>(
	    Long.class, Task.class
	  ); 

	}
 

如你所见,我们增加了一个静态的find字段,为一个有Long类型唯一标识的Task实体定义了一个finder方法。

	// Find all tasks
	List<Task> tasks = Task.find.all();
	    
	// Find a task by ID
	Task anyTask = Task.find.byId(34L);

	// Delete a task by ID
	Task.find.ref(34L).delete();

	// More complex task query
	List<Task> tasks = find.where()
	    .ilike("name", "%coco%")
	    .orderBy("dueDate asc")
	    .findPagingList(25)
	    .getPage(1);
 

3.事务Action

 

默认情况下,Ebean不使用事务。但是你可以利用事务助手为你的Ebean创建一个事务。例如:

	// run in Transactional scope...  
	Ebean.execute(new TxRunnable() {  
	  public void run() {  
	      
	    // code running in "REQUIRED" transactional scope  
	    // ... as "REQUIRED" is the default TxType  
	    System.out.println(Ebean.currentTransaction());  
	      
	    // find stuff...  
	    User user = Ebean.find(User.class, 1);  
	    ...  
	      
	    // save and delete stuff...  
	    Ebean.save(user);  
	    Ebean.delete(order);  
	    ...  
	  }  
	});
 

你也可以使用@play.db.ebean.Transactional注解你的Action来自动为你的Action中的方法提供事务管理。

	@Transactional
	public static Result save() {
	  ...
	}
 

#集成JPA

 

1.通过JNDI暴露数据源

 

JPA要求通过JNDI访问数据源。添加如下配置就可以通过JDNI暴露Play管理的任意数据源。

	db.default.driver=org.h2.Driver
	db.default.url="jdbc:h2:mem:play"
	db.default.jndiName=DefaultDS
 

 

2.为你的项目添加JPA的实现

 

Play2.0没有内建的JPA的实现,你可以选择可用的实现,例如要用Hibernate,只需要加入如下依赖到你的工程:

	val appDependencies = Seq(
	  "org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final"
	)
 

3.创建持久层测试

 

下一步你得创建一个正确的persistence.xml JPA配置文件。把它放到conf/META_INF目录下,这样它就会正确的加到你的classpath里了。

这里是一个Hibernate的简单配置:

	<persistence xmlns="http://java.sun.com/xml/ns/persistence"
		     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
		     version="2.0">
		     
	    <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<non-jta-data-source>DefaultDS</non-jta-data-source>
		<properties>
		    <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
		</properties>
	    </persistence-unit>
	    
	</persistence>
 

 

4.使用@Transactional为JPAAction做事务注解

 

每个JPA调用必须完成事务,要为某个特定的Action启用JPA,用@play.db.jpa.Transactional注解。这样会将你的Action方法与管理事务

的JPA Action组合。

	@Transactional
	public static Result index() {
	  ...
	}
 

如果你的Action仅是完成查询,你可以设置readOnly属性为true:

	@Transactional(readOnly=true)
	public static Result index() {
	  ...
	}
 

5.使用play.db.jpa.JPA助手

 

通过play.db.jpa.JPA辅助类,在任何时候你可以获取到当前实体的管理器。

	public static Company findById(Long id) {
	  return JPA.em().find(Company.class, id);
	}
 

 

2
0
分享到:
评论
2 楼 aming831231 2015-12-12  
请问下ebean可以执行原生sql语句吗?
1 楼 somefuture 2013-12-06  
你好,你讲的很详细。我想知道不使用Ebean只是用JPA如何配置多个数据源,又怎么为实体指定数据源呢?

相关推荐

    Play framework 2.0入门教程(四)的源代码,Play留言板(数据库版)

    Play框架支持JDBC和Anorm等库来操作数据库,本例中可能会使用Anorm,这是一个轻量级的SQL模odel库,允许我们直接用Scala代码编写SQL查询。 接着,我们将定义数据模型。例如,可以创建一个`Message`模型类,包含`id`...

    play2.0 for java developers.pdf

    访问SQL数据库 - **配置和使用JDBC** - 配置数据库连接池,执行SQL语句。 - **使用Ebean ORM** - 提供对象关系映射功能,简化数据操作。 - **集成JPA** - 支持Java持久化API,便于数据持久化。 ##### 9. 使用...

    play框架手册

    框架id(framework ID) - 141 - 从命令行设置框架id - 142 - 22.生产部署 - 142 - application.conf - 142 - 设置框架为prod模式: - 142 - 定义一个真实的数据库: - 143 - 禁止JPA的自动结构更新: - 143 - 定义一...

    play-scala-isolated-slick-example:示例Play Slick项目

    6. "playframework" - 这是项目的核心框架,是一个灵活的Web开发框架,使用Scala和Java构建服务器端应用。 7. "WebappScala" - 明确指出该Web应用程序是使用Scala语言编写的。 【压缩包子文件的文件名称列表】:...

    spring2.0 hibernate 3.0 struts1.1 xfire1.2 整合

    但随着技术的发展,现在更多的开发者可能转向使用Spring Boot、Hibernate ORM(取代XFire的现代Web服务框架如Spring Web Services)和更新版本的Struts或替代品如Play Framework。 然而,由于描述中提到“jar自已去...

    slick增删该查

    《Slick:数据库操作的全面解析》 在Java和Scala的开发环境中,Slick是一个强大...在实际项目中,Slick不仅可以简化数据库交互,还可以与其他Scala框架无缝集成,如Akka和Play Framework,构建出高效稳定的后端服务。

    2015-Framework:2015年框架

    2. **Hibernate ORM**: Hibernate是Java中的一个对象关系映射(ORM)框架,它允许开发者使用Java对象而不是SQL来操作数据库。在2015年,Hibernate 4.x版本仍然是主流,提供了对JPA 2.1的支持,增强了性能和易用性。 ...

    框架笔试-tang.docx

    * Play Framework 分析这些 Web 框架的优缺点包括: * Spring MVC:优点是轻量级、灵活、可扩展性强;缺点是学习曲线陡峭 * Struts 2.0:优点是功能强大、可扩展性强;缺点是配置复杂、学习曲线陡峭 * Hibernate:...

    基于java开发的开源网址导航网站项目.zip

    3. **框架使用**:为了提高开发效率,开发者可能会选择使用Spring MVC、Struts2或者Play Framework等Java Web框架。这些框架提供了一套完整的解决方案,包括依赖注入、事务管理、安全控制等。 4. **数据库管理**:...

    非常好的一个开源论坛,感兴趣的朋友可下载研究研究

    从压缩包子文件的文件名称“简易java框架开源论坛系统”来看,这个论坛系统可能采用了一种简洁的Java框架来构建,可能是Spring Boot、Struts2或者Play Framework等。这些框架简化了开发过程,提供了开箱即用的功能,...

    mobile-notification-api:行动通知API

    3. **Java后端开发**:在Java后端,开发者可能使用Spring Boot或Play Framework等框架来构建API服务,这些框架提供了处理HTTP请求、路由、数据访问和事务管理等功能,使得开发高效且易于维护。 4. **RESTful API...

    java开发的公司官网源码-companysite:雨果公司网站的源代码

    2. **Web开发框架**: 公司官网可能使用了Spring Boot、Vaadin、Play Framework等Java Web框架,这些框架简化了开发过程,提供了MVC(Model-View-Controller)架构模式,便于实现动态网页。 3. **前端技术**: 源码...

    SplitWise

    5. **后端开发**:Java作为SplitWise的后端语言,利用Spring Boot或Play Framework等轻量级框架提供服务。这些框架简化了开发过程,提供了依赖注入、安全控制和自动配置等功能。 6. **安全性**:SplitWise必须确保...

    Java Based Software Project Management-开源

    5. **Java框架**:在项目管理中,开发者可能利用Spring Framework、Hibernate ORM、Struts或Play Framework等Java框架来简化开发,提高代码复用性,加速项目进度。 6. **敏捷开发**:在Java软件项目管理中,敏捷...

Global site tag (gtag.js) - Google Analytics