【问题标题】:ScalikeJdbc Multiple InsertScalikeJdbc 多重插入
【发布时间】:2015-08-20 23:43:53
【问题描述】:

我们如何在同一个事务中执行多次插入?

  def insertData(dataList: List[Data])(implicit session: DBSession = autoSession) = {

    // todo: this is probably opening and closing a connection every time?
    dataList.foreach(data => insertData(data))
  }

  def insertData(data: Data) = withSQL {
    val t = DataTable.column
    insert.into(DataTable).namedValues(
      d.name -> data.name,
      d.title -> data.title
    )
  }.update().apply()

如果每次插入的事务数以千计或更多,则为每个插入创建不同的事务将不会有效。

http://scalikejdbc.org/documentation/operations.html

【问题讨论】:

    标签: scala orm scalikejdbc


    【解决方案1】:

    像这样修改你的 insertData 方法:

    def insertData(data: Data)(implicit session: DBSession = AutoSession) = withSQL {
      val t = DataTable.column
      insert.into(DataTable).namedValues(
        d.name -> data.name,
        d.title -> data.title
      )
    }.update().apply()
    

    然后,使用 DB.localTx:

    DB.localTx { implicit s =>
      dataList.foreach(data => insertData(data))
    }
    

    【讨论】:

    • 所以这将执行一个事务,而不是我的会为每个插入创建一个事务?
    • 是的,接受 DBSession 作为隐式参数可以使操作加入同一个事务。
    • 是否需要 DB.localTx 块?
    • 这不会执行插入dataList.length() 次吗?
    • @KazuhiroSera 我真的很感谢@kakaji 问题的答案 - 这不会执行插入dataList.length() 次吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多