JDBC是一个阻塞操作,它将导致线程等待,直接使用JDBC进行查询将导致性能降低

1、2 配置数据源

play提供了一个用于管理JDBC连接池的插件,可以根据需要配置任意多个数据库,想要使用此插件,需要在build.sbt依赖项中添加如下依赖项:

libraryDependencies += javaJdbc

之后便可以在conf/application.conf文件中配置数据源,默认的数据源必须叫做default:

可以配置多个数据源:

如果连接数据库,则需要使用到username和password的值,配置一下即可

1、3 访问并使用数据源

play.db包中定义了操作数据源的类,主要使用的类是play.db.Database类

这是对默认的数据库进行的访问,当访问其他的数据库时可以用如下方式:

使用一个@NameDatabase注解

1、4 配置连接池

Play使用 HikariCP 作为默认的连接池, 建议JDBC连接池配置为物理磁盘数加上cpu核数的两倍,即,如果您有一个四核CPU和一个磁盘,则池中总共有9个JDBC连接:

1、5 获取数据库连接

注意:play不会自动释放数据库连接,需要手动释放

1、6 SQL语句日志配置

Play使用 jdbcdslog-exp 来实现日志记录,开启日志需要先在application.conf配置文件中设置:

然后在logback.xml文件中进行日志详细记录方式配置:

此内容在logback.xml中

注意:这仅用于开发环境,不应在生产环境中配置它,因为性能会降低,并且会污染日志。

1、7 配置JDBC驱动

在build.sbt文件中添加jdbc驱动依赖,例如添加mysql的:

libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.41"

当依赖的东西太多时,可以换种写法:

libraryDependencies ++= Seq(
javaJdbc,
"mysql" % "mysql-connector-java" % "5.1.41",
.....

1、8 配置自定义连接池

首先创建连接池个参数设置类,此类需要实现

play.api.db.ConnectionPool接口

另外需要将此类进行配置:

play.db.pool=your.own.ConnectionPool(全类名)

配置的参数可以查看jdbc-reference.conf文件

2、JPA集成

2、1 添加JPA和实现依赖

首先添加JPA依赖JavaJPA,这是默认依赖JDBC,接下来添加一个JPA实现依赖,例如使用Hibernate:

libraryDependencies ++= Seq(

  javaJpa,

  "org.hibernate" % "hibernate-core" % "5.4.2.Final"

JPA要求数据源可以通过JNDI访问,可以通过在conf/application.conf中添加响应配置,使得jndi公开任何play管理的数据源,如下:

db.default.jndiName=DefaultDS

2、2 创建持久化单元

首先创建JPA的配置文件persistence.xml,放在conf/META-INF目录下(可以尝试直接放在conf目录下试试),具体内容在persistence.xml中

再在conf/application.conf文件中配置JPA的持久化单元:jpa.default=defaultPersistenceUnit

2、3 使用JPA部署应用

build.sbt中添加配置:

playKeys.externalizeResourcesExcludes += baseDirectory.value / "conf" / "META-INF" / "persistence.xml"

2、4 使用JPA

Play提供了play.db.jpa.JPAApi来处理实体管理器和事务,操作jpa方式如下:

直接在一个操作中使用JPA(使用play的默认线程池)将限制异步使用play的能力,因为JDBC会阻塞它运行的线程。

3、使用Ebean ORM

3、1 配置Ebean

1)需要在project/plugins.sbt中添加Ebean插件:

addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "4.1.0")

2)接下来修改build.sbt 文件,用来启动使用ebean:

lazy val myProject = (project in file(".")) .enablePlugins(PlayJava, PlayEbean)

3)Ebean插件带有两个组件,一个是与数据库对话的运行库,以及一个SBT插件,它增强了与Ebean一起使用的model的编译Java字节码。这两个组件都需要进行配置,以便Ebean知道使用到的模型在哪里。运行库可以可以将用到的模型配置到应用配置文件中,在appliaction.conf文件中配置,配置方式如下:

ebean.default = ["models.*"]

针对多个数据库可以进行不同的配置,每个数据库对应的实体可以不一样=,配置如下:

ebean.orders = ["models.Order", "models.OrderItem"]

ebean.customers =  ["models.Customer", "models.Address"]

如果application.conf文件与ebean模型类所在的项目不同,可能导致模型不可用,这是可以使用playEbeanModels 来指定模型在哪些module中起作用,其配置如下:

playEbeanModels in Compile := Seq("models.*")

3、2 Model superclass

Play中提供了一个model的超类io.ebean.Model

Ebean会自动为model生成getter、setter方法,如果用户自定义了,则ebean不会再重复生成,在编译时期,ebean生成的setter、getter方法是不可用的

3、3 事务操作

Ebean在默认情况下进行insert、delete、update、query是使用事务操作的,如果想在一个事务中进行多个操作,可以如此使用:

可以使用注解来控制事务:

也可以使用代码来控制事务:

提示:文中提到的文件,在资源中均可找到,或者联系作者,免费获取

1、使用jdbc连接数据库1、1 简介JDBC是一个阻塞操作,它将导致线程等待,直接使用JDBC进行查询将导致性能降低1、2配置数据源play提供了一个用于管理JDBC连接池的插件,可以根据需要配置任意多个数据库,想要使用此插件,需要在build.sbt依赖项中添加如下依赖项:libraryDependencies += javaJdbc之后便可以在conf/application.conf文件中配置数据源,默认的数据源必须叫做default:可以配置多个数据源:如.
18.1 依赖的格式在dependencies.yml 你可以这样写:organisation -> name revision [classifier] 组织 -> 名称 版本 [分类]对于PlayPlay framework 的模块(CRUD and secure module),版本号不是必须的:play play -> crud play -> secure18.2 depen
下面是一个依赖管理语句(sbt) libraryDependencies ++= Seq(javaJdbc, javaEbean) 这里的javaJdbc javaEbean出自下面所示的地方: playframework/framework/src/sbt-plugin/src/main/scala/PlayImport.scala (github) 当 play找到至少一个注释了@javax.persistence.Entity标识的类时,play 将自动启动 hibernate 实体管理器。 Query query = JPA.em().createQuery("select * fromArticle"); List articles =query.getResultList(); render(article