Scala 如何在Slick中一次保存多次拍摄

Scala 如何在Slick中一次保存多次拍摄,scala,slick,Scala,Slick,我对Scala和Slick还很陌生,我正在努力学习我的概念。我想知道如何在这里用一个命令保存多个表。i、 我有一个电子邮件系统,其中有文件夹和邮件表。“我的文件夹”表可以有许多邮件。我想保存一个文件夹,所有的邮件都可以单独保存。类似于hibernate,我们在其中指定映射,它根据我们的关系和映射处理多个保存、删除或更新 提前感谢您的时间。与hibernate等传统ORM工具相比,Slick更接近数据库引擎。那么,在没有ORM的传统数据库引擎中,我们如何解决这个问题呢 使用SQL: 我们将创建包含

我对Scala和Slick还很陌生,我正在努力学习我的概念。我想知道如何在这里用一个命令保存多个表。i、 我有一个电子邮件系统,其中有文件夹和邮件表。“我的文件夹”表可以有许多邮件。我想保存一个文件夹,所有的邮件都可以单独保存。类似于hibernate,我们在其中指定映射,它根据我们的关系和映射处理多个保存、删除或更新


提前感谢您的时间。

与hibernate等传统ORM工具相比,Slick更接近数据库引擎。那么,在没有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()
class FolderTbl扩展表[文件夹](“文件夹”){
def id=列[Int](“id”,O.PrimaryKey,O.AutoInc)
def名称=列[字符串](“名称”)
def*=id~名称(Folder.apply\ux,Folder.unapply\ux)
}
val FolderTbl=新的FolderTbl()
类MessageTbl扩展表[Message](“Message”){
def id=列[Int](“id”,O.PrimaryKey,O.AutoInc)
def folderID=列[Int](“folderID”)
def sender=列[字符串](“发送方”)
定义内容=列[字符串](“内容”)
def*=id~folderID~sender~内容(Folder.apply,Folder.unapply)
def folder=foreignKey(“fk_msg_folder”,folderID,FolderTbl)(.id)
}
val MessageTbl=new MessageTbl()
现在我们可以在使用slick之前进行查询。例如:

val query = for {
  msg <- MessageTbl if msg.folderID === someFolder.ID
} yield msg
val lst : List[Message] query.list() //list all messages in a folder
val query=for{

谢谢你的回答,我明白了。