2014-04-13 42 views
0

我使用噴塗使用噴塗。噴霧實際上非常容易使用,而Slick也是如此。然而,連接到數據庫臭名昭著的油滑的方法是這樣的:使用噴塗使用噴塗IO使用噴塗

Database.forURL("jdbc:mysql://localhost:3306/SprayBlog?characterEncoding=UTF-8", user="xxxx", password="xxx", driver = "com.mysql.jdbc.Driver") withSession { 
    implicit session => 

     (Article.articles.ddl ++ User.users.ddl).create 
    } 

我討厭打字這麼多,每當我做一個數據庫連接。我之前使用過Play-Slick框架,Play有這個application.conf,我可以用它存儲我的數據庫連接地址,用戶名和密碼。我不知道這是否屬實,但是不應該將他們的數據庫信息存儲在加密文件中,而且我可能是錯的,但我覺得conf被阻止外部訪問和加密。

那麼有沒有辦法讓我調用數據庫操作更容易?如果我想將信息放入conf,我該如何訪問它?

回答

0

將你的數據庫存儲在一個val中或者寫一個def,它提取你感覺重複的東西。 withSession有助於連接範圍的確定。我不知道噴霧配置文件,但他們可能使用Typesafe配置,它是一個允許讀取文件的庫。噴霧也可能通過api暴露它的配置。

+0

如果您需要訪問許多控制文件的數據庫,你會作出一個數據庫中的單莫名其妙吧? – loyalflow

+0

您可以將val放入單例對象中並從那裏導入。如果你想能夠換出數據庫實例,你可以從一個具有抽象數據庫成員的特徵繼承,或者在單例中放置一些依賴於配置的交換邏輯。 – cvogt

2

使用Slick 2.1.0,您可以使用Database.forConfig()

在application.conf:

db { 
    url = "jdbc:mysql://localhost/DatabaseName" 
    driver = "com.mysql.jdbc.Driver" 
    user = "root" 
    password = "" 
} 

在你的數據庫訪問代碼:

import scala.slick.driver.MySQLDriver.simple._ 
import models.Item 
import tables.ItemTable 

class ItemService { 

    val items = TableQuery[ItemTable] 

    def all: List[Item] = Database.forConfig("db") withSession { implicit session: Session => 
    items.list 
    } 
} 
+0

哈哈顯然這是一個新功能! –