These are chat archives for scalikejdbc/ja

5th
Jul 2015
Shunsuke Wada
@letusfly85
Jul 05 2015 03:43
はじめまして。
初歩的な質問なのですが、scalikejdbcGenで生成されるクラスのcreateに似たメソッドで、引数をList[T]で
受け取って、レコード生成してくれるようなメソッドはありますでしょうか?
たとえが不適切かもしれないのですが、railsのactive recordのように、エンティティをnewして、saveするようなことをしたいです。
KAWACHI Takashi
@tkawachi
Jul 05 2015 04:49
List[T] だと全部同じ型になりません?
Shunsuke Wada
@letusfly85
Jul 05 2015 04:56
すみません。言葉足らずでした。
例えば、MembersのようなエンティティをscalikejdbcGenで生成した場合、
someList.foreach(ここで複数のMembersをnewして、listにアペンドする)
そのご
その後、listをテーブル[Members]に登録したい。
です。
すみません。ちょうど外出してしまったので帰宅後にgist等を作成して改めて質問します。
申し訳ないです。。
kenji yoshida
@xuwei-k
Jul 05 2015 17:19
batch insert? scalikejdbc/scalikejdbc#28
Shunsuke Wada
@letusfly85
Jul 05 2015 23:54

遅れました。すみません。。

はい。まさに、batch insertのようなことがしたいです。
現在は下記のように実装しています。

MsTabColumns

というエンティティを自動生成しました。

実装順序としては、

allTarget: List[MsTabColumns]

というリストをプログラム中でいくつかのステップを踏んで作成し、それを最終的にはRDBMSに保存しようとしています。(※)

最初に、insertを発行して、pkとnot null制約系のカラムの要件を満たすレコードを追加し、その後、saveを利用して他の属性についても更新しています。

    (allTarget).foreach {ac =>
      withSQL {
        insert.into(MsTabColumns).columns(
            MsTabColumns.column.tableId, MsTabColumns.column.columnId, MsTabColumns.column.columnNameJp, MsTabColumns.column.subsysId
          ).values(
            ac.tableId, ac.columnId, ac.columnNameJp, ac.subsysId
          )
      }.update.apply()
    }
    (allTarget).foreach(MsTabColumns.save)

これを、できれば、

MsTabColumns.create(allTarget)

と書きたいです。

(※)一晩だって、Listを作成する最初のステップ付近で、createしちゃうのが、可読性的には高いのかな、とも思い始めてます。。すみません。。