SQL
iBatisのSQL設定ファイルで次のようにして結果キャッシュの指定ができる <cacheModel id="test.cache" type="LRU"> <flushInterval hours="24"/> <flushOnExecute statement="test.refresh"/> <property name="size" value="200"/> </cacheModel> これはLRUで最大24時間、200件のキャッシュを行う指定となる。またキャッシュを無効にする条件として test.refreshを指定している。あとはこのキャッシュ設定を適用するselectでc…
iBatisで1対多のテーブルからの取得などの場合にサブクエリの指定は次のように行う。 <result property="history" column="id" select="getHist"/> これで、 getHist のSQL中で id の値は #value# で参照できるようになる。サブクエリに渡す値が一つで足りる場合は問題ないが、複合キーなどの場合に駆動表の複数カラム</result>…
一覧ページング処理では件数の取得を先ず行ってから部分的な一覧の取得を行うことが多いが、その場合SQLの条件部分は全く同じになる。 そのようなSQLの共通部分を別に定義し、参照することで"全く同じ"を保証することが出来る。 <select id="getAllCount" resultClass="java.lang.Integer"> SELECT COUNT(*) as num FRO</select>…
前の方法(iBatisでの1対多のテーブルからのデータ取得 - Struts 2+Spring 2+Tiles+Acegi+iBatis+GWT+JUnit 4+JMockit でフルスタックJAVAフレームワーク)だと、1対多の多側の取得にN回のクエリ実行が必要で、全体でN+1回のクエリを実行することになって…
iBatisで駆動表と1対多の関係にあるテーブルから同時にデータを取得してみる素直な実装では次のよう データを格納するクラスでプロパティとしてList型をつくり public class User { : public static class History { String date; double pay; public Strin…
結果Beanのプロパティに一致する場合は resultMap ではなく、 resultClass で直接結果格納用のクラスを書けば処理される <resultMap id="result" class="tutorial.User"> <result property="id" column="id" columnIndex="1"/> <result property="name" column="name" columnIndex="2"/> <result property="password" column="password" columnIndex="3"/> </result></result></result></resultmap>
iBatisで動的な条件を作成してみる。 例えばidのリストもしくは名前のリストで一致するものの一覧を取得する場合 <select id="getFilter" resultMap="result" parameterClass="tutorial.UserFilter"> SELECT id,name,password,salary FROM suser <dynamic prepend="WHERE"> <iterate prepend="OR " property="ids" open="id in (" close=")" conjunction=","> #ids[]# </iterate></dynamic></select>
Springの iBatisサポートを使うので殆ど何も難しいことは無いtutorial.UserDAO.java
Context.xml に次のように書くとセッションをDBに保存するようになる ( Experimental なようなので実運用するには十分テストしないといけませんね ) Apache Tomcat Configuration Reference - The Manager Component Postgresのドライバを利用する場合の設…