トップページtech
983コメント363KB

Java⇔RDBのMapping-Frameworkを語るスレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
●各種Framework
[Torque]
http://db.apache.org/torque/
http://homepage1.nifty.com/kingyoshi/computer/jakarta/torque.htm

[HYBERNATE]
http://hibernate.bluemars.net/1.html

[CasterJDO]
http://www.castor.org/jdo.html
http://www-6.ibm.com/jp/developerworks/java/021025/j_j-castor.html

[ObJectRelationalBridge (OJB)]
http://www.terra-intl.com/jakarta/ojb/

●コネクション・プーリング
[Jakarta Commons DBCP]
http://jakarta.apache.org/commons/dbcp/
(Jakarta Commons DBCPを使ってみよう。)
http://taka-2.com/jclass/DBCP/
(DBCP利用法 from "『カモン!Commons!』 Jakarta Commonsを使ってスキルアップ" (2002/09))
http://www.mobster.jp/wiki/index.jsp?pid=Commons#i10
0175172NGNG
内部結合は出来たので、とりあえず書いておきます

顧客を表す以下のテーブルがあるとします。

create table employee (
id numeric,
name varchar;
manager_id numeric
);

idはキーであり
nameは名前
manager_idはマネージャのid(自己参照)が入る

//片方のテーブルにe2というエイリアスを設定する
criteria.addAlias("e2", EmployeePeer.TABLE_NAME);
//idが1であるレコードを検索対象とする
criteria.add(EmployeePeer.ID, 1);
//managerのidが1であるレコードを検索対象とする
criteria.add("e2.id", 1);
//自己結合の設定
criteria.addJoin(EmployeePeer.MANAGER_ID, "e2.id");
0176デフォルトの名無しさんNGNG
外部結合するのなら、直接Toroqueをつかうより
Viewをつかったほうがパフォーマンス的にもいいと思うんだが。
0177172NGNG
Viewを使って試験したのですが
あるテーブルを結合させる処理を1000回行ったところ
JDBCを直接操作する処理では平均で1.8秒かかったのに対し
Viewを使用したTorqueでは2.3秒
Viewを使用せずにTorqueの機能を利用して結合させたところ3.4秒でした。
0178デフォルトの名無しさんNGNG
>>174
哀しいけれど、O/Rマッピングツールの目的は
ObjectをRDBにどれだけ楽して格納するか、であって、
RDBレコードを如何にしてObjectとして扱うか、が目的では
ないんだよね。

なので、行儀正しく正規化されたDBありき、だと
ツールの特性を梃子にした生産性の向上は実現しづらい。

なにごとも適材適所。
照会系は「JDBC for Reading」で割り切るのもテかな、と
あらゆるオブジェクトを透過的に操作できるのは
理想的だけれど、スループットを考慮にいれると、
現状ではなかなかそうもいかないですよね。

切り分けの境界をどこに置くかがなかなか難しいんだけれど、
そこをきちんと定義できてこそエンジニアかな、とも思う。

私もここらへんはまだまだ手探りなので、
このスレの意見はとても参考にさせてもらってます。
0179172NGNG
JDBC+Viewの試験もしてみました。
Torqueの場合はかなり高速化されたので、こちらはさぞ早いだろうと想像しましたが
何と平均が1.8秒→2.1秒と0.3秒もダウン
0180デフォルトの名無しさんNGNG
>>179
どのようなスキーまでどのようなSQLを実行したかによってスピードなんて変わってくるからね。
1000件で2秒前後ならそんなもんでしょ。

そこまでクリティカルなスピードを求められるならTorqueやJDBCをじかに呼ぶより
EJBを導入することを考えたら?

OJBならEJBと連携できそうだし。
0181172NGNG
>>180
EJBも勉強してます。

とりあえず今は、お手軽にDBを操作する方法は無いかな〜と思ってて。
前は「俺実装」のライブラリを一生懸命作ってたんですが、
そんなのより世の中に有る物を使ったほうがいいかなって。
0182デフォルトの名無しさんNGNG
だれかExpressoのO/Rマッピング使ってる方いますか?

TorqueとOJBを試してみたので(個人的にはOJBが簡単で好き)
今度はExpressoを試してみようと思います。
0183デフォルトの名無しさんNGNG
WizOnline開発中!プログラマ緊急募集(C,Java)
http://219.96.231.242/wizonline/
2chスレ
http://game3.2ch.net/mmominor/dat/1053536167.dat


0184デフォルトの名無しさんNGNG
OJBですが、tutorial1を試してそれからPostgreSQLで
tutorial1のサンプルアプリを動作さすところまで実験しました。

でも、最初からアプリを作成する方法がよく分かりません。
PostgreSQLで動かそうと思っても、最初にOJB_HL_SEQテーブルが無いとかのエラーがでるし。
「何そのテーブル?」って感じでした。

一から作成しているチュートリアルって何処かに無いですか??
0185デフォルトの名無しさんNGNG
>>180

>そこまでクリティカルなスピードを求められるならTorqueやJDBCをじかに呼ぶより
>EJBを導入することを考えたら?

EJBってJDBC直より速いか?
0186デフォルトの名無しさんNGNG
>>185
それは断じてないでしょう。
0187デフォルトの名無しさんNGNG
>>185 >>186
EJBもJDBC使ってるのですが
0188デフォルトの名無しさんNGNG
>>187
だから、JDBCを直接つかう場合よりもオーバーヘッドが増えて遅くなるって話だろ。
0189172NGNG
OJBも実験してみました。
SELECTを試したのですが
idとnameを持つテーブルを1000回selectする実験では

JDBC:1311ms
Torque(BasePeer#doSelect()を使用):1505ms
Torque(BasePeer#doPSSelect()を使用):914ms
OJB(PersistentBroker使用):3625ms

と、言う結果でした。
なぜかTorqueのdoPSSelectが最強です。
OJBはリフレクションを多用しているせいか、かなりの低パフォーマンスですね。
0190172NGNG
ただ、OJBはTorqueよりもエレガントなコードが書けそうです。
0191172NGNG
あと、JDBCはPreparedStatementを使用しました。
0192デフォルトの名無しさんNGNG
EJBはキャッシングがあるから、場合によっては生JDBCより早いんでないの?
複雑なアプリでどの程度効用が得られるかはかなり疑問だが。
0193山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0194デフォルトの名無しさんNGNG
保守
0195デフォルトの名無しさんNGNG
>>188
全体的な視野で JDBC直 と EJB(CMPEntityBean) とのパフォーマンス比較を
すべきだと思うよ。自分でJDBC直でちまちま実装するより、EJBコンテナに
任せたほうがより効率的に処理することもあるんでないの?
0196デフォルトの名無しさんNGNG
>>195

JDBC for Readingパターンっていうわけじゃないけど、
通常はEJB(EntityBean)を使いつつ、
性能がほしいときに、DAO(JDBC直)って使い分けてる。
0197デフォルトの名無しさんNGNG
JDO vs Hibernate
http://www.javalobby.org/thread.jsp?forum=61&thread=7836
0198デフォルトの名無しさんNGNG
漏れも>>184同様、Tutorialの次に何をすればいいのかわからん...。
自分のプロジェクトはどう作っていけばいいのかの話の説明がないような?
0199デフォルトの名無しさんNGNG
すいません、皆さんヒントだけでも教えてください

簡単な例で説明します。
社員の出勤表があります。
テーブル名はもちろん社員番号で割り振っています
カラムは[日付、その日の成績、出勤時間、退勤時間]
(実際には、10項目ぐらいカラムがあります)
となっています。
で、当然同じ形式で社員の人数分あるわけなんですが
このテーブル全てをマッピングしようと思い、
トルクとか使おうと思ってるんですが、
テーブル名ごとにマッピングのクラス書かないといけないんですかね?
いままでJDBC直のばあい、入力した社員番号から
テーブル読み出せるんですが
トルクとかのラッピングツールはテーブルごとに
クラス作りますよね?社員全部のクラス全部作らないといけないんでしょうか;

あとは、テーブルの合成も考えました。カラムは今までのやつ+社員番号が
入るカラムを追加して(重複許す)全部一つにまとめるって言うやり方です

でもできれば社員ごとに一個ずつテーブル設けたいのです
なんか、うまいやり方ありませんか?
0200184NGNG
>>198
むやみやたらにいろいろと実験したら何となく使えるようになったヨ。
でも今のプロジェクトではC#を使っている罠(w
0201デフォルトの名無しさんNGNG
>>199
テーブル設計が激しく間違っていると思う
0202デフォルトの名無しさんNGNG
>>199
社員ごとにテーブルがあるってこと?

それがそもそもありえない。
RDBMSの勉強からやりなおした方がいいんじゃないの?

0203デフォルトの名無しさんNGNG
>あとは、テーブルの合成も考えました。カラムは今までのやつ+社員番号が
入るカラムを追加して(重複許す)全部一つにまとめるって言うやり方です

このテーブルを最初っから作ればいいんじゃないの?
粗度が細かすぎるよねその設計だと・・・・
0204デフォルトの名無しさんNGNG
>>201-203
レスありがとうございます
すいませんDBの勉強しなおしてきます
ちなみに私が設計したわけではありません;;
なので、とりあえずデータ構成の変更を要請してみます
ありがとうございました
0205デフォルトの名無しさんNGNG
>>204
だれの設計かは知らんが、もし先輩社員の設計ならば
職場を変えたほうがよいかも。
0206デフォルトの名無しさんNGNG
>>205
ありがとうございます

いちおう、再設計を任せてくれそうになりました
社員番号と日付を複合キーにして>>203の言うようにしたいと思います
ただ、テーブルの行数が多くなりますが
dbの設計って言うのは何千行でも何万行になったとしても
こういう作り方をした方が良いのでしょうか?
聞いたところによると、最初の設計者が
あまりひとつのテーブルに行が多いとダメ見たいなことを言ったらしくて
そういう使用になったそうです
いちおうオラクル6なんですがオラクルなら何千何万行でもOKですよね
0207あぼーんNGNG
あぼーん
0208デフォルトの名無しさんNGNG
>>206
まずはその最初の設計者を殺しましょう。

Oracle(というか最近のフリーのRDBもふくめて)でシステムを組んでて何千何万程度のレコードを心配するなどありえない。

0209デフォルトの名無しさんNGNG
>206
君の会社すさまじくレベル低いよ。大丈夫か?
DB設計の初心者本で正規化について勉強しとけ。

技術力低い分、特定業務に特化しているのだろうから、そのあたり盗んどけ。
自分の思い通りにプロジェクトを進められるのも、
小さな会社の利点だから、いろいろ挑戦してみな。
ある程度力つけたら転職しよう。
0210デフォルトの名無しさんNGNG
>>209

言い忘れていましたが、私の会社は基本的には
そういう開発の会社じゃないんです
つまりその、皆はっきり言ってプログラミングとかそういうことは
ド素人でして今回私が抜擢されたのもただ単にちょっと知識
あるからという理由です
自社で済むことは自社内でって言うやり方でして・・・
なので、そのプログラム作ったからといって給料とかupされるわけではありません;;
実際にはセールスが本業なもので・・・
とにかく、後継に迷惑かけないようにしっかりしたもの作ります
転職ですか・・・プログラマはわたしは無理ですね
ココに質問する時点でセンス無いと思ってますから
0211デフォルトの名無しさんNGNG
>>210
逆にそんな立場でTorque使おうって技量に感心。
素直にそう思った。エンジニアじゃないのね。
0212209NGNG
なるほど、社内のシステム部の人か。

少なくともRDBの基礎は学んでおいたほうがいい。
あまり良書とは思わなかったが、入門テキストとして、
「データモデリング 基礎講座」
http://www.seshop.com/detail.asp?pid=1401

最初からしっかりしたものを作るのは不可能なんで、
何度か作り直すつもりで、気軽にね。

自社で開発するにしても一人ぐらい社外の人を入れないと無意味だと思う。
顧客と開発が近いのは利点だけどね。
0213デフォルトの名無しさんNGNG
とりあえず、何かの結果を求める時に、そこに必要な全てがどんな階層(関連)になっていれば
扱い易いか考えてみ。(それを徹底的にやるのが正規化)

[社員の給料]←[社員の特定]←[部署の特定]←[会社全体]

みたいな。簡単で申し訳無いけど。
0214デフォルトの名無しさんNGNG
>>211
Javaなら知っていたので「それでよければやりますが?」
といったら、「じゃ、君やりなさい」と言われました
自社のポータルも私作ったんですが
DB関係はまったくの初めてなのでどうなることか・・・

>>212
システム部といっても私一人ですよw
そういう部署設けるぐらいの会社なら
最初から外部に頼んでますよきっとw
リンク先覗いてみますありがとうございました

>>213
ありがとうございます参考にさせていただきます
0215213NGNG
あ、ちなみに一人で作業するとなると、必然的に脳内で「一人会議」とか「一人ミーティング」とか
する事になると思うけど(笑)その時にはきちんと"全体設計"、"DB設計"、"コーディング"とか、
各フェーズを明確に分けて考えた方がいいよ。それぞれの担当になったつもりで。
その方が完成までの期間とかの見積もりも出せるし。

今回の件では、やりたい事は明確になっているんだろうから、とりあえずDB設計が先か?
その設計次第でコーディングの内容も変わるだろうし。

とりあえず、概算見積もりにはいつも10%上積みの方向で上司に報告っと。(笑
0216デフォルトの名無しさんNGNG
正直、その技量でTorqueに手を出すと悲惨なことになると思う。

Torque自体のドキュメントやツールがロクに整備されていなかったり
チュートリアルと実際の動作が異なる場面が多かったりなので頑張れ。
0217デフォルトの名無しさんNGNG
俺もTorqueはちょっとどうかなーと思う。
まだCastorの方がいいかも。
XMLとの親和性もいいしね。
なんならRelaxerという手もある。
0218デフォルトの名無しさんNGNG
ORACLEのBC4Jってどうなんだろ?
JDeveloper高いけど・・・。
0219デフォルトの名無しさんNGNG
>>206
なんでOracle6なんだってつっこみはなし?

あと、さすがに数百万行とか数千万行になるようなテーブルとかならデータ量は気にするよ。
でも、こんなの出てくる場面がかなり限られるので気にしないほうがいいね。
0220デフォルトの名無しさんNGNG
HYBERNATE使って開発してるんだけど、SQL組み立てて
直接JDBCに流し込んだほうが効率いいんだよなー。
それでもプロジェクトで使うって決まってるから使うんだけどね。
レコードをオブジェクトにして、getsetでデータを加工する。
だから件数が多くなればなるほど処理時間が長くなるし、JVMのヒープも
多めにとっとかないとパンクする。
プログラム組んでるとJavaって感じよりCOBOLって感じがする
COBOLもSQL組み込めるけど、Keyをセットしてデータを取り出すって手法似てる
って意味です。
0221デフォルトの名無しさんNGNG
だれが、SQLラップしようとしたのだろう?
SQLと、プログラムのロジックの記述を
うまく組み合わせることが出来ていたのに
なぜわざわざ。。
仕方ないからやってるけどさ、
逆に、カラム増やすことになって困るのは
CMPや、Torqueのほうだってことだよ
俺個人のプロジェクトのとき
頻繁にテーブル構成変えることあったが
SQL生だとすぐに移行できるが
CMPとかだとちょっとね・・・
動き出すまでに、1時間ぐらい躊躇う
0222デフォルトの名無しさんNGNG
禿同
漏れもSQLを生成させて実行、その後はResultSet、
もしくはVectorを返して扱った方がいい。
更新系もSQLを生成してExecuteでぶち込む。
そういうメソッドを持ったクラスの方が
テーブルマップドクラスなんかより
よっぽどビジネスロジックに即している。

SQLについては、ビューやストアドを
使ってシンプルにさせることは
追求しなければならないと思うけどね。
0223デフォルトの名無しさんNGNG
禿同
だいたい、JavaにおけるDBのラッピングなんて
JDBCドライバで十分だよ
それにいまのJavaプログラマは
環境依存になるととたんに触手を引っ込める
DD書くのも環境依存なDDが必要になると
いやがるな。まあ、それは俺もそうなんだが・・・
あと個人的な意見では、>>222も書いてるように
SQLの使い方、ストアドの使い方その他もろもろの
細かい設計までやれるのはとても興味深い
パフォーマンスも追及できるしさ・・・
まあ、仕事では再利用性などを考えて
クラスの数が多くなってもいいからデザイン優先じゃない?
まあ、仕事だからやってるし勉強するけど
おれは、今のこの現状を少し遠目に見ている
0224デフォルトの名無しさんNGNG
実は俺もうすうすそう思っていた。
DBとオブジェクトのマッピングは、所詮
不毛な努力なんじゃないかと。
そういいつつも、何かうまい方法があるんじゃないかと、
つい方法を追ってしまうのだよねえ。
0225デフォルトの名無しさんNGNG
だいたい、DB相手のEJBやってるとさ バカらしくなってきちゃう
だって、そのままSQL発行すりゃーいいのに
わざわざ、オブジェクトにsetで格納して
向こうに届いたら、getでとりだしてデータベースにインサート
どう考えても二度デマだろ?
向こうで取り出しやすいようにオブジェクトの
構造もワザワザ考えなきゃならんし・・・
DBからデータ取り出すときなんて、
余計なカラムまで取り出したくないのに、
プログラム的には一度に取り出したほうが楽なので
不要なデータも取り出してしまう・・・
しかも、コレクションで帰ってくりゃ
イテレータで取り出し&キャスト

SQLなら他のUtilクラスにPreparedStatementのSQL文を
static フィールドで保持しておいて置けば
意外にコードはすっきりだ
ストアドもそう。
だいたい、SQL直ってそんなに難しいか?

0226デフォルトの名無しさんNGNG
まあ、一人で開発している分にはSQLを直接書くのもいいだろうな。
0227デフォルトの名無しさんNGNG
>>189

無意味な事してんな(w

インデックスの張り方とかテーブルの列の順序とかstmt、rsのCloseのタイミングとかは?
0228デフォルトの名無しさんNGNG
>>226
SQL知らない奴らと一緒にやってると大変だよな。
0229デフォルトの名無しさんNGNG
SQLなんてどうせ基本しかつかわんだろ?
おれなんてSELECT UPDATE INSERT DELETE
FROM ORDER BY ぐらいしかつかわんぞ
あとは、データとってくればこっちで何とかするやり方だよ
ストアドだってその場その場で本開けば解決できるしよ
0230デフォルトの名無しさんNGNG
なんか妙に一理あるな<マッピング不要論

結局俺もJDBC直でやっているわけだが理由は結局O-Rマッピングがかったるいから。
でも、JDBC直だといまいちだなと思うこともまた事実なわけよ。結局Javaの世界
ではやっぱりObjectで扱っているわけだがResultSetからObjectへの変換および
その逆がうざい。かといってODBはよくわからんし。
0231230NGNG
でさ。ふと思うわけよ。理想的なObjectの格納方式ってなんだろうって。
結局

(1)オブジェクトをなんでもかんでも叩きこめる
(2)問い合わせ言語が存在し必要なオブジェクトがひっぱりだせる

の2条件が成立すれば良い訳だ。なんとなくxpath + XMLDatabase + relaxer
でよさげなのが出来そうだな。
0232デフォルトの名無しさんNGNG
俺が最初DBのマッピングって聞いたとき
オブジェクト投げたら勝手にインサートしてくれるものだと思ってた
たとえば、JavaBean同様にアクセサのあるクラスで
それに加えて内部に情報フィールド持ってて
たとえばデータソースURIやユーザ名パスワード
(この辺はプロパティファイルから読み込みでも可)
でもって、
#insert(Object obj)
とか何とかやれば、自動で内部のフィールドを取り出して
自分でSQLを吐いてくれるやつだとおもってた・・・

Torqueぐらいのマッピング程度ならいままで書いてますよね皆さん?
SQL文発行は一部のクラスに追いやって
そのクラスに対して
insert(String[],int,int)や
select(String tablename,String columnname)
とか言うメソッド作ったりしてませんでした?
俺にとってはなんの新鮮味もありませんでしたよ
0233デフォルトの名無しさんNGNG
>>231
すれ違いかもしれんが
おれ、いまXQueryって興味あるんだけど
XMLデータベースサーバーって
どっかにFreeのやつない?
俺が探して見つけたのは有料なんだよなぁ
いまは、え〜と名前忘れたが
@ITとかで落としたソフトのライブラリ使って
Javaで遊んでいるのだが・・・
0234デフォルトの名無しさんNGNG
>>233
XindiceってApacheのXMLプロジェクトじゃなかったっけ。
0235デフォルトの名無しさんNGNG
XMLデータベースって、どうやって性能出すんだろ。
挿入と、複数条件検索がコストでかいがするんだが。
インデックスをノードのプライマリキー以外に張ると
エライコトになりそうだし。
XMLデータベースと入っても、ストレージのフォーマット
実装は、XMLとは直接関係無いスタイルにしないといかん
ぽな気がするな。

詳しい方、無知なオイラにおしえてちょ。
0236デフォルトの名無しさんNGNG
マッピング不要論が色々と出ているわけだが、
SQL直書きだと、オブジェクト指向のメリットであるところの
ロジックの局所化が生かせないような気がしなくもない。
ユースケース単位でがしがしSQL作っていると、
いろんな機能にSQLが散らばってメンテナンス不能、みたいなことには
ならないでしょうか。
SQL直書き派は、その辺のところどうやって解決してますか。
0237デフォルトの名無しさんNGNG
>>235
やっぱインデックスとキャッシュなんじゃない。
あとは問い合わせ言語の最適化とかのアルゴリズムとか。
0238デフォルトの名無しさんNGNG
最初は面倒だけど、なれてくると、
あとで拡張するときとかめちゃ便利だよ。
Torqueつかってます。
0239デフォルトの名無しさんNGNG
>236に同意。
SQLはプログラムから見ると単なる文字列リテラルでしかないのでロジックとの結合がぜんぜんない。

例えばResultSetから取り出すときに型を間違えてもコンパイラはぜんぜんわからない。
これがマッピングされた環境だとそんなタコミスは即座に判明し、テスト時間も大幅に減らせる。
最悪テーブルの構成が変わったときなど、SQLだとgrep→SQL変更→ResultSet関連変更などなど件数が多くなるほど悪夢のような作業が発生するが、
マッピングされているとその変更の手間は局所的に押さえることができる。
0240デフォルトの名無しさんNGNG
(´-`).。oO(不要ならばここで述べた理由をいえば上司を説得できるだろうに。。。。。
0241230NGNG
>>233
>>234もレスってるがXindiceがFreeで使える。ただXQueryはまだ実装されて
いない模様。

Apache Xindice XQueryはまだサポートされていない模様
http://xml.apache.org/xindice/

Xindice:無料で使えるXMLデータベース
http://www.atmarkit.co.jp/fxml/tanpatsu/18xindice/xindice01.html

>>235
XMLデータベースを使用する時って現状だと性能はあんまり関係ない場合に限
られるんじゃないかと思う。XMLデータである限りその分のオーバーヘッドは
どのみちかかるしな。今のところそれなりのデータ量があるようなプロジェク
トで使う気にはなれないな。

ただ、将来的には面白いと思って見ている。Object<->Relationalの変換を
考えるから色々問題が発生するんだよ。それなら根っこから変換不要のデータ
保持形式を考えてみるのも面白いだろ。
0242デフォルトの名無しさんNGNG
>>233
eXistはどうよ
0243デフォルトの名無しさんNGNG
(´-`).。oO(だからうちは使ってないけど。。。。。
0244デフォルトの名無しさんNGNG
「データベースシステム」
を構築しているのか
「Javaアプリケーションシステム」
を構築しているのか
そこら辺の違いだな。
0245デフォルトの名無しさんNGNG
SQLゴリゴリ派ですが、
メンテナンス性とかより
学習コストがかかるから避けるっつーのはおかしいかな。
もちろん、プロジェクトメンバー数分ね。

ODB技術全般的にドキュメント類が整備されてないし、
バグもあるだろうし、「なんでできないんだー!」で
結構時間食ったりする。

外部結合とか○○ができないから、そこんとこは
JDBCでよろしくね。なんてことになったら
それこそ、メンテナンス性なんてあったもんじゃない。
実際、システムを保守する人も開発メンバーとは限らないしね。

あと、Strutsほど導入メリットもなく、枯れてないしね。
0246デフォルトの名無しさんNGNG
>>245
それはよく分かる。
RDBのオブジェクトマッピングは、まだ設計技術が
成熟していないような気がするので、
うかつにやってしまうとかえってメンテナンス性が落ちそうな気がする。
この分野はまだまだ試行錯誤の期間が続きそう。
なんか、Strutsとか出る前に、Servletに直接ビジネスロジックを
ゴリゴリ書いていた時代を思い出す。
納期がやたらと早いプロジェクトとかだと、導入リスクが高いので、
SQLゴリゴリの方が、メンテナンス性(メンバーのメンテ能力っていう意味でね)
は高いような気がする。
0247デフォルトの名無しさんNGNG
.NETのSqlDataAdapter や PowerBuilderのdatawindow のような、
クエリをクラスにカプセル化するような方法は一般的ではないのでしょうか?
そっちのほうがずっと抽象的な扱いができると思うんですが。
そう思って、SELECT文を記述したXMLからResultSetのラッパークラスを
生成するプログラムを作り中。
0248_NGNG
http://homepage.mac.com/hiroyuki44/
0249デフォルトの名無しさんNGNG
>>247
SqlDataAdapterはとてもじゃないけどカプセル化されてるように見えない。
糞VB再現って感じだなー
0250247NGNG
ちょっと知ったかぶってしまいました。
SqlDataAdapter って3日前に知ったばっかりでした。
0251239NGNG
>239といいつつ、実はTorqueのCriteriaクラスのタコさ加減にかなり萎えて
Torque採用状態からSQL直書きに方針を戻してしまった経験がある…。
0252デフォルトの名無しさんNGNG
.NetのDataAdapterはインターフェースみたいなもんで、
それ自身は何もしてくれない。
DELETE INSERT UPDATEなどの、SQLは自動生成もできるが、手書きが基本らしい。
それで、こいつを経由してDataBaseのメモリーコピーをDataSetというものに入れる。

DataSetに入れてしまえば、DataGridなどのGUI部品と連結ができる。
並び替えやページングのイベントが定義されてるので、
そこにちょこっと、コードを書いてやれば、並び替えやページングのできあがり。

VB厨の俺には小難しくてよく分からんです。
今はEmployeesなどのテーブルクラスと、Employeeレコードクラスを作って、
Employees#selectでEmployeeオブジェクトをhashmapやCollectionに入れてます。
どうやって、DataSetに移行しよう、、、
0253デフォルトの名無しさんNGNG
>>247
いやだから、ResultSetをラップするまで行かなくても
SQL文の発行を一部のクラスに追いやることぐらいできるでしょって
言ってるわけさ俺は
そういうクラスを自動で作ってくれるのがTorqueだと俺はおもってる
厳しく言えば、ただそんだけってこと
なので、いままでクラスの設計で半ラッピング状態で
やってきた俺にとって、わざわざTorqueその他のラッピングつーるなんて
使う意味ないねってことよ

>クエリをクラスにカプセル化するような方法は一般的ではないのでしょうか?
これこそオブジェクト指向でないの?



0254そんな低レベルな話よりもNGNG
すごいねここ
http://strangeworld-honten.com/cgi-bin/bbs.cgi
0255デフォルトの名無しさんNGNG
SELECTを外に追い出す行為はあまり好きではない。
やはりソースが分かれると可読性が下がると思う。
0256デフォルトの名無しさんNGNG
俺はCastorやHibernateにTorqueのCriteriaっぽいクラスをかぶせて
使うようにしているので、「東京都に在住のユーザー一覧は以下の
ようにして取得してね」みたいな指示だけ出すようにしてる。
プロジェクトメンバーのメンテナンス能力は別に気にならないなあ。

Pref tokyo = PrefManager.fetchPref(13);
UserCriteria uc = new UserCriteria();
uc.setPref(tokyo);
ArrayList users = UserManager.fetchUsers(uc);
0257デフォルトの名無しさんNGNG
すれ違いだけど、漏れははSQLのラッパーより、
htmlの特にtableのラッパーが欲しい。
JSPで書いてもhtmlとjavaコードが
乱立するし、書いていて非常に不毛に感じる。

細かな設定のできる(例えばカラーで極細の罫線の代わり
をさせたりする)クラスライブラリないかな。

やっぱ、自力で専用ライブラリつくってるのかな。
0258デフォルトの名無しさんNGNG
>>257
普通にカスケードスタイルシートかけばいいだけでわ?
0259デフォルトの名無しさんNGNG
>>258
ゴメソちょっと、舌足らずだった、
tableを生成するのに
(行追加とかcolspan,rowspanや、極細罫線とか)
ラッパーメソッドで細かな設定
ができるクラスライブラリがないかなと。
0260デフォルトの名無しさんNGNG
>>259
明確にほしいものができてるみたいだったら、タグリブを自分でつくれば?
0261デフォルトの名無しさんNGNG
>>259
http://jakarta.apache.org/ecs/index.html
こーゆーのではなくて?
0262デフォルトの名無しさんNGNG
なので、みんな独自の汎用ライブラリを
自分で作っているのかなと聞いてみた。
やっぱ、260も作っているの?
(SQLまでもラップするのがあるのだから、
こういうのもあってもいいのかなと思ったわけ。)

Javaコード内で枠だけ作ってさらにコード内で
値をいれたりとかね。
作っても(つくれるかな?)いいけど
その時間があれば、ベタで書いた方が早いかな...
0263デフォルトの名無しさんNGNG
>>261
そうそう、こういうのです。
今、ちらっと見ただけですが、
試して遊んでみます。
ありがとうございます。
0264デフォルトの名無しさんNGNG
>>262
俺はそこまでのヤツは必要になったことがないから作ったことはない。

が、必要になればまずは探す。
なければ仕方がないのでつくる。
0265デフォルトの名無しさんNGNG
>>261
ECSって使いどころが微妙じゃない?
0266261NGNG
>>265
微妙というか殆ど無いと思う。俺は使いどころイマイチわからん。
ただ、モノ自体は面白いと思うし、将来的には使い道出てくるかもしれないし。

漏れは259が問題にしてるタグとスクリプトコードが混じったりするのは平気。
というかこれからはjellyっスよ(藁
0267デフォルトの名無しさんNGNG
jellyって実際どうよ?何かまだまだって気がするんだが
情報激しくキボンヌ
0268デフォルトの名無しさんNGNG
>>267
俺もまだまだだとおもう。
ただmiddlegenとかxdocletとか見るにつけ、そういう流れはあるんだろうなーとか。
将来的にORマッピングの強力なツールとなるかもしれない気がする悪寒。
んであとはmavenな。jelly採用してるし、mavenがブレークすれば
ついでにjellyもブレークするんではなかろうか?って勝手に思ってる。

情報はぜんぜんないね。英語の情報もあんま無いし。
1.0リリースするまではCVSでソースとかテストケースをウォッチするぐらいしか
なさそう。テストにあるjellyスクリプトが一番参考になるんじゃないかなぁ。
でもまだタグライブラリの方は動かないの結構多いけど(w
0269デフォルトの名無しさんNGNG
>>268さんくすこ
jelly興味はあるんだが取っ付きがなー
0270デフォルトの名無しさんNGNG
今更でスマソが、O-R Mapping Frameworkの利点をRDB厨の私に分かりやすく
説明してもらえる情報源ってないでしょうか?
SQLを知らないJavaPGでも開発できる!
→RDB使うんだからSQLぐらい勉強しろよ!
物理設計が省力化できる!
→RDB使うんだから物理設計ぐらいちゃんとしろよ!
 というかE-R系ツールでも結構できるのに。
SQLだと保守性が悪い。
→そのためのドキュメントやん。複雑ならストアドも併用しる。

というわけで、Torqueの特集記事をJavaWorldやWebDBPressで読んだのでつが、
利点が全く理解できないのでつ。
でもJDOは勉強しようと思ってる...
0271デフォルトの名無しさんNGNG
>>270
SQL云々かんぬんでなしに、オブジェクト指向における永続化層を自作しなくてよいという話。
これだけでバグと単体テスト工数が3分の1ぐらい軽く減るだろ?
0272270じゃないよNGNG
>>271 横レスすまん
つまり、きちんとしたオブジェクト指向による設計を行えば、オブジェクト-DB間の
コードは大体似たようなものになる(というかワンパターンになる)から、そこを
自動生成できるようにします、というのがMapping-Frameworkのコンセプト、という
ように捉えたんだけど、合ってるかな?
0273271じゃないよNGNG
>>272
SQLとJavaはその設計思想からして違うものだからレイヤーとしてO-RMappingを使用して
DBとJavaの層を接続しようと。

EJBなんかもその一部だよね。
0274デフォルトの名無しさんNGNG
>>270
単純に、

Person p = new Person();
p.setName("お前");
db.save(p);
Person p2 = db.retrieve(Person.class, "お前");

こういうコーディングができると楽じゃない?
■ このスレッドは過去ログ倉庫に格納されています