1
我是Scala和Slick的新手,嘗試吸取我的概念。我想知道如何用一個命令在這裏保存多個表。即我有一個具有文件夾和消息表的電子郵件系統。我的文件夾表可以有很多消息。我想保存一個文件夾,並可以保存所有的信息。像hibernate這樣的地方,我們指定了映射,它根據我們的關係和映射關注多個保存或刪除或更新。如何在Slick中一次保存多個請求
感謝您的時間提前。
我是Scala和Slick的新手,嘗試吸取我的概念。我想知道如何用一個命令在這裏保存多個表。即我有一個具有文件夾和消息表的電子郵件系統。我的文件夾表可以有很多消息。我想保存一個文件夾,並可以保存所有的信息。像hibernate這樣的地方,我們指定了映射,它根據我們的關係和映射關注多個保存或刪除或更新。如何在Slick中一次保存多個請求
感謝您的時間提前。
Slick比傳統的ORM工具(如hibernate)更接近數據庫引擎。那麼我們如何在沒有ORM的傳統數據庫引擎中解決這個問題?
使用SQL:
我們將創建持股約文件夾和郵件
CREATE TABLE Folder (
ID int not null primary key autoincrement,
Name string not null
--etc
)
CREATE TABLE Message (
ID int not null primary key autoincrement,
FolderID int not null foreign key references Folder(ID),
Sender string not null,
Content string not null
--etc
)
現在什麼會我們希望與這些表做信息表? 我們可能要顯示所有文件夾列表
SELECT ID, Name FROM Folder
我們想在一個給定的文件夾中顯示的所有消息
SELECT ID, Sender, Content FROM Message WHERE FolderID = ?
我們想創建一個新的文件夾
INSERT INTO Folder (Name) VALUES (?)
給給定文件夾添加信息
INSERT INTO Message (FolderID, Sender, Content) VALUES (?, ?, ?)
刪除消息
DELETE FROM Message WHERE ID = ?
你的想法。
現在Slick允許您直接在scala中執行這些確切的操作。
首先,我們創建模型
case class Folder(id:Int, name:String)
case class Message(id:Int, folderID:Int, sender:String, content:String)
然後我們創建表定義
class FolderTbl extends Table[Folder]("Folder") {
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
def name = column[String]("Name")
def * = id ~ name <> (Folder.apply _, Folder.unapply _)
}
val FolderTbl = new FolderTbl()
class MessageTbl extends Table[Message]("Message") {
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
def folderID = column[Int]("FolderID")
def sender = column[String]("Sender")
def content = column[String]("Content")
def * = id ~ folderID ~ sender ~ content <> (Folder.apply _, Folder.unapply _)
def folder = foreignKey("fk_msg_folder", folderID, FolderTbl)(_.id)
}
val MessageTbl = new MessageTbl()
現在我們可以使用光滑之前做查詢。例如:
val query = for {
msg <- MessageTbl if msg.folderID === someFolder.ID
} yield msg
val lst : List[Message] query.list() //list all messages in a folder
因此,不,slick不允許您自動執行某些操作,它更像是一個改進的SQL。但它可以讓您更好地控制代碼的功能和時間。
感謝您的回答。我明白了。 –