8、play框架中持久层操作

1、使用jdbc连接数据库

1、1 简介

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是使用事务操作的,如果想在一个事务中进行多个操作,可以如此使用:

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DBCHM-最简单、实用的数据库表列批注维护工具

DBCHM支持SqlServer/MySql/Oracle/PostgreSQL/Sqlite等数据库的表列批注维护管理。DBCHM有以下几个功能表,列的批注可以编辑保存到数据库。表,列的批注支持通过pdm文件导入的方式进行更新到数据库。基于数据库中的表列结构(列ID/列名/数据类型/长度/精度…

图书管理员【2017年普及组第二题】

图书管理员图书管理员图书管理员 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。 每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图书编码恰好以读者的需 求码结尾&…

jzoj4012-Distinct Paths【搜索】

正题 题目链接:https://jzoj.net/senior/#contest/show/3008/1 题目大意 n∗mn*mn∗m的格子,kkk种颜色涂色,求有多少种方案使得没有任意一条只往右和下的路径经过相同颜色。 解题思路 显然如果nm−1>knm-1>knm−1>k就无解,所以nm−…

浅谈Log4net在项目中如何记录日志

一 引入背景在软件开发周期中,无论是开发中,或是测试中,或是上线后,选择合适的工具监控程序的运行状态至关重要,只有如此,才能更好地排查程序问题和检测程序性能问题等。本篇文章主要与大家分享&#xf…

9、play中缓存的使用

1、简介 对于存储在缓存中的任何数据,都需要放置一个再生策略,以防数据丢失。这一理念是play基本原则之一。对于进程内缓存,Caffeine 通常是最佳选择。如果需要分布式缓存,play提供了Memcached和Redis的第三方插件。 2、添加缓存…

ISBN号码【模拟】

ISBN号码ISBN号码ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后…

jzoj4010-Philips and Calculator【搜索,dp】

正题 题目链接:https://jzoj.net/senior/#contest/show/3008/2 题目大意 两个数(a,b)(a,b)(a,b),两个操作 (a,b)−>(a,b1)(a,b)->(a,b1)(a,b)−>(a,b1)(a,b)−>(a∗b,b)(a,b)->(a*b,b)(a,b)−>(a∗b,b) 求ppp步以内aaa能到达[l,r][l,r][l,r]之…

10、使用ws调用Rest api

目录 1、简介 2、添加WS配置 3、发送请求 4、处理请求 5、常用模式和用例 6、自定义BodyReadables和BodyWritables 6、独立WS 7、访问AsyncHttpClient 8、配置WS 1、简介 有时我们想从一个play应用程序中调用其他HTTP服务。Play提供了WS库来进行异步HTTP方法调用。 …

笨小猴

笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多…

codeforces Cable Connection

我的思路很暴力 直接枚举斜率[-100000,0]之间,然后设置一个非常远的直线,对所有点扫一遍,确定一个离这条直线最近的点P。 用点P和斜率k来创建cable,并用cable的距离来relax答案。 现在问题在于,怎么来枚举k&#xf…

拥抱开源,Office 365 开发迎来新时代

前言作为全球最大的开放源代码托管平台,Github在上周迎来了它的十岁生日。自从2008年正式上线以来,Github上面汇聚了数以千万计的开发人员和各种项目,它几乎成为了开源的代名词和风向标,各大软件巨头都纷纷支持,在广大…

jzoj4015-数列【循环节,数论】

正题 题目链接:https://jzoj.net/senior/#contest/show/3011/0 题目大意 给出n,m,a,b,c,x0n,m,a,b,c,x_0n,m,a,b,c,x0​ xiaxi−12bxi−1cx_iax_{i-1}^2bx_{i-1}cxi​axi−12​bxi−1​c 求xn%mx_n\%mxn​%m 解题思路 第一段n≤1e6n\leq 1e6n≤1e6直接O(n)O(n)O(n)暴力做 第…

11、OAuth和OpenID服务

1、OAuth 1、1 简介 OAuth是发布受保护数据并与之交互的简单方法。对于人们来说,这也是一种更安全的访问方式。例如,它可以用来访问你的用户在Twitter上的数据。Play仅提供对OAuth 1.0的支持。 1、2 基本工作原理 在build.sbt中添加配置:…

求凸函数极值 CSF迭代法(雾)

简介 本算法用来求解凸函数极值点的问题,由我在写ACM习题时想到,在网上并未找到这样的算法,拿出来给大家分享一下,如果网上没有的话,我决定给它起名叫做 CSF迭代法,如果这个算法早已经存在,那就…

排座椅【贪心】

排座椅 题目描述 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。同学们在教室中坐…

jzoj4016-圈地为王【状压,bfs,几何】

正题 题目链接:https://jzoj.net/senior/#contest/show/3011/1 题目大意 n∗mn*mn∗m的格子,格子之间有道路,对于每个iii就走过最短的回路使得 圈住iii个有价值的格子没有圈住任何一个坏格子 解题思路 判断一个点是否在一个多边形内,我们可…

12、play整合Akka

1、简介 Akka使用actor模型来提高抽象级别,并提供一个更好的平台来构建正确的并发和可扩展的应用程序。在容错方面,它采用了“Let it crash”的模式,这种模式在电信行业获得了巨大成功,用于构建永不停止的自我修复系统应用程序。…

codeforces National Property 2sat模板题

题目链接 每个字符只能取小写和大写两种情况&#xff0c;因此满足2-sat的要求。 我们从第2个word开始&#xff0c;与前一个word进行比较。比较的时候从word左边的字符开始&#xff0c;找到左起的第一个不相同的字符(位置为pos)。 1.如果word[i-1][pos]<word[i][pos]。 …

传球游戏【DP】

传球游戏传球游戏传球游戏 题目描述 上体育课的时候&#xff0c;小蛮的老师经常带着同学们一起做游戏。这次&#xff0c;老师带着同学们一起做传球游戏。 游戏规则是这样的&#xff1a;n个同学站成一个圆圈&#xff0c;其中的一个同学手里拿着一个球&#xff0c;当老师吹哨子…

ASP.NET Core 添加统一模型验证处理机制

一.前言模型验证自ASP.NET MVC便有提供&#xff0c;我们可以在Model(DTO)的属性上加上数据注解&#xff08;Data Annotations&#xff09;特性&#xff0c;在进入Action之前便会根据数据注解&#xff0c;来验证输入的数据是否合法&#xff0c;下面介绍以下如何统一处理验证并返…