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是使用事務操作的,如果想在一個事務中進行多個操作,可以如此使用:
可以使用注解來控制事務:
也可以使用代碼來控制事務:
提示:文中提到的文件,在資源中均可找到,或者聯系作者,免費獲取
總結
以上是生活随笔為你收集整理的8、play框架中持久层操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 争议激烈!新晋斯隆奖得主发布最新研究,网
- 下一篇: 摩托罗拉 moto razr 2022