clojure-japan

2015-10-16T01:07:19.000124Z

ClojureでORM。JPAの知識が必要ですが…clj-jpaこれからくる予定です。 http://qiita.com/kawasima/items/8162151c606ebb9a7d1d

2015-10-16T01:15:21.000126Z

slackに繋がってなかったので話題投げておきながら放置してしまった

2015-10-16T01:16:19.000127Z

SQLをDSLで書けるより生のSQL書いてネストしたオブジェクトとかを良い感じに扱ってくれる何かが欲しかったのですがありませんかね?

2015-10-16T01:20:35.000128Z

Common Lispならdataflyみたいなのがあるんですけどね。 fukamachi/datafly https://github.com/fukamachi/datafly

2015-10-16T01:39:15.000130Z

korma は eager loading できないんだっけか

2015-10-16T01:39:52.000131Z

cumin 使ったこと無いけど korma に eager loading つけてくれるんじゃなかったかな

2015-10-16T01:39:59.000132Z

https://github.com/kgann/cumin

ayato_p 2015-10-16T01:45:41.000134Z

keen さんのしたいことってマップのベクタをユーザー定義型のベクタに変えたいとかそんな感じなんですかね?(それを簡単に実現するライブラリが欲しいということ?)

2015-10-16T01:51:07.000135Z

いや、例えば {:name “hoge” :items [{:id 1 :type 2} {:id 2 :type 1}]}みたいなオブジェクトが欲しい時にSQLだと SELECT name, items.id, items.type FROM users LEFT JOIN items ON items.user_id = users.id みたいたクエリになるじゃないですか。そしてその返り値が

name = “hoge”, id = 1, type = 2
name = “hoge”, id = 2, type = 1
みたいになる訳で欲しい形とは違うので裏で変換してくれないかな、と。

ayato_p 2015-10-16T01:53:34.000136Z

あー、なんとなく分かりました。

2015-10-16T01:54:16.000137Z

DSLでもいいんですけど出来ればSQLは生で書きたい派ですね。裏のクエリが見えないのは怖い。

ayato_p 2015-10-16T01:56:29.000138Z

honeysql とかなら普通に実行前のクエリ見れると思いますよ。

ayato_p 2015-10-16T01:57:40.000139Z

マップ組み立てていって文字列に直す、ところまでがだいたいこの類のライブラリのお仕事であとは組み立てたのを jdbc に渡すーとかが普通なんじゃないんですかね

ayato_p 2015-10-16T01:58:08.000140Z

で、 keen さんのほしがってるようなやつは僕は心当りないです、ごめんなさい

2015-10-16T01:58:44.000141Z

まあ、でもモジュール性が高いのでSQLの結果を良い感じにしてくれる奴と組み合わせれますね。

ayato_p 2015-10-16T02:08:55.000142Z

ちょっと疑問というかあれなんですけど datafly は SELECT name, items.id, items.type FROM users LEFT JOIN items ON items.user_id = users.id` を {:name “hoge” :items [{:id 1 :type 2} {:id 2 :type 1}]} いうふうに出来るんですか? has-many オプションとかって動き的にはマクロでそれを簡単に取得出来る関数を定義してやってるだけのように見えるんですけど( keen さんの例だと user-items みたいな関数が自動で生えてくるイメージ?

2015-10-16T02:10:18.000143Z

この例だとnameをkeyにして同じnameでitemの部分が違えば配列にまとめるみたいな処理になります。

2015-10-16T02:11:13.000144Z

1クエリで必要な情報を全てもってきてアプリケーション側で加工します。

ayato_p 2015-10-16T02:11:36.000145Z

そういうことなんですね。

2015-10-16T02:12:13.000146Z

1オブジェクト毎にクエリ飛ばしてたら遅い(N+1クエリ問題)

ayato_p 2015-10-16T02:13:12.000147Z

それはそうでしょうね

ayato_p 2015-10-16T02:13:38.000148Z

(これは keen さんが datafly-clj を…)

2015-10-16T02:13:55.000149Z

うっ…

1
tnoda 2015-10-16T02:56:25.000150Z

group-by?

2015-10-16T03:58:00.000151Z

@mopemope: お、cuminいいですね。独自マクロ組んで、inでとってきたやつをマッピングしてました。

2015-10-16T04:03:37.000152Z

group-by的な事ですね。今のところpartitionしてどうこうして、ってやってます

2015-10-16T04:08:13.000153Z

最初DSL書くのかぁって思ってスルーしたんですがcuminがやりたいことでしたね。

2015-10-16T04:08:32.000154Z

私の欲しい機能ってeager loadingって言うんですね。

2015-10-16T04:10:04.000155Z

逆というか保存する時にhas manyとかをそれぞれのテーブルに保存する機能はなんていうんですか?

2015-10-16T04:40:58.000156Z

@kawasima: clj-jpa、普段ジャバジャバやってる人にはヒットするかもですねー!

2015-10-16T04:41:01.000157Z

clj-ebeanとか探してみたけどなかった。。

2015-10-16T04:42:13.000158Z

clj-jpa見てて、いっそのこと型はClojure側じゃなくてJavaでってのも潔くていいのかもしれないとか思ったり

2015-10-16T06:04:02.000159Z

@kara_d ありがとうございますー。clj-jpaだとJPAなので当然ですが、課題感の"良い感じに"マッピングし、EagerLoadingにしておけばN+1もクリアできるわけなのですが、いかんせんJPQLがあまり受け入れられないという…

2015-10-16T06:19:13.000160Z

個人的にmybatisも嫌いじゃないですね。XMLは書きたくないですがS式とかで書くならアリかも。

2015-10-16T06:40:08.000161Z

@kawasima: 移行の苦労が少なそうなJava人材はだいたいJPAもしくはJPAライクなモデルを書いたことがあると思うので、潜在的需要はありそう。Clojureでも引き続き同じモデル使えるのか、って。

2015-10-16T06:40:50.000162Z

@blackenedgold: 実は僕もXMLは書きたくないなあと思ったのでednでかけたら嬉しいですね

2015-10-16T06:42:02.000163Z

モデルは全部Javaで作ってしまってJVM言語内で使い回すってのもアリですがedn記述でclojureのハッシュマップとベクタにしてくれるのも欲しいですよねー。

2015-10-16T06:43:24.000166Z

私がちょいちょい質問飛ばしてるのは研修でDSP作ってるからなんですがそれにつての発表もします。

👏 1
2015-10-16T07:40:26.000167Z

leiningenプロジェクト中の1ファイルを実行することって出来ます? lein run-script src/some/file.clj みたいに。

2015-10-16T07:43:27.000168Z

あ、gen-classとjarで解決することにしました

ayato_p 2015-10-16T07:45:56.000169Z

lein exec が簡単ですね。 https://github.com/kumarshantanu/lein-exec 連続してやるにはつらいけどちょっとしたことになら結構使える

2015-10-16T07:46:35.000171Z

おお、まさに、ですね。