日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8、play框架中持久层操作

發(fā)布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8、play框架中持久层操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、使用jdbc連接數(shù)據(jù)庫

1、1 簡介

JDBC是一個阻塞操作,它將導致線程等待,直接使用JDBC進行查詢將導致性能降低

1、2?配置數(shù)據(jù)源

play提供了一個用于管理JDBC連接池的插件,可以根據(jù)需要配置任意多個數(shù)據(jù)庫,想要使用此插件,需要在build.sbt依賴項中添加如下依賴項:

libraryDependencies += javaJdbc

之后便可以在conf/application.conf文件中配置數(shù)據(jù)源,默認的數(shù)據(jù)源必須叫做default:

可以配置多個數(shù)據(jù)源:

如果連接數(shù)據(jù)庫,則需要使用到username和password的值,配置一下即可

1、3?訪問并使用數(shù)據(jù)源

play.db包中定義了操作數(shù)據(jù)源的類,主要使用的類是play.db.Database類

這是對默認的數(shù)據(jù)庫進行的訪問,當訪問其他的數(shù)據(jù)庫時可以用如下方式:

使用一個@NameDatabase注解

1、4?配置連接池

Play使用HikariCP作為默認的連接池,建議JDBC連接池配置為物理磁盤數(shù)加上cpu核數(shù)的兩倍,即,如果您有一個四核CPU和一個磁盤,則池中總共有9個JDBC連接:

1、5 獲取數(shù)據(jù)庫連接

注意:play不會自動釋放數(shù)據(jù)庫連接,需要手動釋放

1、6 SQL語句日志配置

Play使用?jdbcdslog-exp來實現(xiàn)日志記錄,開啟日志需要先在application.conf配置文件中設(shè)置:

然后在logback.xml文件中進行日志詳細記錄方式配置:

此內(nèi)容在logback.xml中

注意:這僅用于開發(fā)環(huán)境,不應(yīng)在生產(chǎn)環(huán)境中配置它,因為性能會降低,并且會污染日志。

?1、7 配置JDBC驅(qū)動

在build.sbt文件中添加jdbc驅(qū)動依賴,例如添加mysql的:

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

當依賴的東西太多時,可以換種寫法:

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

1、8 配置自定義連接池

首先創(chuàng)建連接池個參數(shù)設(shè)置類,此類需要實現(xiàn)

play.api.db.ConnectionPool接口

另外需要將此類進行配置:

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

配置的參數(shù)可以查看jdbc-reference.conf文件

2、JPA集成

2、1 添加JPA和實現(xiàn)依賴

首先添加JPA依賴JavaJPA,這是默認依賴JDBC,接下來添加一個JPA實現(xiàn)依賴,例如使用Hibernate:

libraryDependencies ++= Seq(

? javaJpa,

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

)

JPA要求數(shù)據(jù)源可以通過JNDI訪問,可以通過在conf/application.conf中添加響應(yīng)配置,使得jndi公開任何play管理的數(shù)據(jù)源,如下:

db.default.jndiName=DefaultDS

2、2 創(chuàng)建持久化單元

首先創(chuàng)建JPA的配置文件persistence.xml,放在conf/META-INF目錄下(可以嘗試直接放在conf目錄下試試),具體內(nèi)容在persistence.xml中

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

2、3 使用JPA部署應(yīng)用

build.sbt中添加配置:

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

2、4 使用JPA

Play提供了play.db.jpa.JPAApi來處理實體管理器和事務(wù),操作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插件帶有兩個組件,一個是與數(shù)據(jù)庫對話的運行庫,以及一個SBT插件,它增強了與Ebean一起使用的model的編譯Java字節(jié)碼。這兩個組件都需要進行配置,以便Ebean知道使用到的模型在哪里。運行庫可以可以將用到的模型配置到應(yīng)用配置文件中,在appliaction.conf文件中配置,配置方式如下:

ebean.default = ["models.*"]

針對多個數(shù)據(jù)庫可以進行不同的配置,每個數(shù)據(jù)庫對應(yīng)的實體可以不一樣=,配置如下:

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 事務(wù)操作

Ebean在默認情況下進行insert、delete、update、query是使用事務(wù)操作的,如果想在一個事務(wù)中進行多個操作,可以如此使用:

可以使用注解來控制事務(wù):

也可以使用代碼來控制事務(wù):

提示:文中提到的文件,在資源中均可找到,或者聯(lián)系作者,免費獲取

總結(jié)

以上是生活随笔為你收集整理的8、play框架中持久层操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。