This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-10-16
Channels
- # announcements (1)
- # aws (11)
- # beginners (3)
- # boot (63)
- # cbus (1)
- # cljs-dev (4)
- # clojure (96)
- # clojure-dev (5)
- # clojure-germany (2)
- # clojure-japan (43)
- # clojure-poland (2)
- # clojure-russia (38)
- # clojure-sg (2)
- # clojurescript (138)
- # clojurex (1)
- # cursive (3)
- # datomic (16)
- # docs (6)
- # emacs (3)
- # events (2)
- # ldnclj (42)
- # off-topic (6)
- # om (384)
- # onyx (122)
- # spacemacs (6)
ClojureでORM。JPAの知識が必要ですが…clj-jpaこれからくる予定です。 http://qiita.com/kawasima/items/8162151c606ebb9a7d1d
slackに繋がってなかったので話題投げておきながら放置してしまった
SQLをDSLで書けるより生のSQL書いてネストしたオブジェクトとかを良い感じに扱ってくれる何かが欲しかったのですがありませんかね?
Common Lispならdataflyみたいなのがあるんですけどね。 fukamachi/datafly https://github.com/fukamachi/datafly
いや、例えば {: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
みたいになる訳で欲しい形とは違うので裏で変換してくれないかな、と。DSLでもいいんですけど出来ればSQLは生で書きたい派ですね。裏のクエリが見えないのは怖い。
まあ、でもモジュール性が高いのでSQLの結果を良い感じにしてくれる奴と組み合わせれますね。
ちょっと疑問というかあれなんですけど 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 みたいな関数が自動で生えてくるイメージ?
この例だとnameをkeyにして同じnameでitemの部分が違えば配列にまとめるみたいな処理になります。
1クエリで必要な情報を全てもってきてアプリケーション側で加工します。
1オブジェクト毎にクエリ飛ばしてたら遅い(N+1クエリ問題)
group-by的な事ですね。今のところpartitionしてどうこうして、ってやってます
最初DSL書くのかぁって思ってスルーしたんですがcuminがやりたいことでしたね。
私の欲しい機能ってeager loadingって言うんですね。
逆というか保存する時にhas manyとかをそれぞれのテーブルに保存する機能はなんていうんですか?
@kara_d ありがとうございますー。clj-jpaだとJPAなので当然ですが、課題感の"良い感じに"マッピングし、EagerLoadingにしておけばN+1もクリアできるわけなのですが、いかんせんJPQLがあまり受け入れられないという…
個人的にmybatisも嫌いじゃないですね。XMLは書きたくないですがS式とかで書くならアリかも。
@kawasima: 移行の苦労が少なそうなJava人材はだいたいJPAもしくはJPAライクなモデルを書いたことがあると思うので、潜在的需要はありそう。Clojureでも引き続き同じモデル使えるのか、って。
@blackenedgold: 実は僕もXMLは書きたくないなあと思ったのでednでかけたら嬉しいですね
モデルは全部Javaで作ってしまってJVM言語内で使い回すってのもアリですがedn記述でclojureのハッシュマップとベクタにしてくれるのも欲しいですよねー。
あ、ところでみなさんこれどうぞ。 http://lisp.connpass.com/event/21574/?utm_campaign=event_publish_to_series_watcher&utm_source=notifications&utm_medium=email&utm_content=title_link http://t.co/M70jDGRYGG
私がちょいちょい質問飛ばしてるのは研修でDSP作ってるからなんですがそれにつての発表もします。
leiningenプロジェクト中の1ファイルを実行することって出来ます? lein run-script src/some/file.clj みたいに。
あ、gen-classとjarで解決することにしました
lein exec が簡単ですね。 https://github.com/kumarshantanu/lein-exec 連続してやるにはつらいけどちょっとしたことになら結構使える
おお、まさに、ですね。