オラクルマスタブロンズ学習用サイト

ラクルの出していたWeb雑誌に、基礎から始めるデータベース入門セミナーを発見。

リンクが切れている状態なのでここで一覧にする。



http://www.oracle.com/technology/global/jp/pub/jp/articles/2shin/1/index.html

http://www.oracle.co.jp/2shin/ora74/18_19.html

http://www.oracle.co.jp/2shin/ora75/16_17.html

http://www.oracle.co.jp/2shin/ora76/18_19.html

http://www.oracle.co.jp/2shin/ora77/20_21.html

http://www.oracle.co.jp/2shin/ora78/18_19.html

http://www.oracle.co.jp/2shin/ora79/12_13.html

http://www.oracle.co.jp/2shin/ora80/16_17.html

http://www.oracle.co.jp/2shin/ora81/14_15.html

http://www.oracle.co.jp/2shin/ora82/14_15.html

http://www.oracle.co.jp/2shin/ora83/18_19.html


此処から先は不明・・・・・・・・・・・・

S2Dao N対1マッピングのやり方

DEPテーブル(1側)とUSERテーブル(N側)があって、
DEPNOに紐づくUSERIDを取ってきなさい、というのは普通の話。※1
複数のUSERIDが取れます。


今回はそれに加えて、ちょっと特殊な
DEPテーブルをN側に見る」やり方を調査する必要があったのでメモ。※2

                                                                                      • -

【テーブル】
★USERTABLE


入ってるデータ



★DEPTABLE

※PKが先頭に来てなくて見た目が悪い・・


入ってるデータ


                                                                                      • -

【Todo】
select * from test_usertable u , test_deptable d
  where u.depbango = d.depno and u.userid='0001'

を発行する。
結果はこうなりますね。DEP側がNの関係になっています。


                                                                                      • -

【やり方】
ポイントは「1側のDTOをN側のカラムフィールドと共に定義する」です。
※1の場合だと、N側はUSERですので、DTOはこうなります。





なら※2の場合のN側は?
そう、DEPです。なので、USERをDTOフィールドとしてまとめて定義します。


Seasar2.3⇒2.4 S2Struts⇒SAStruts の移行記録

メモ。

【1】Interceptorの記述方法が違う!


S2Strutsでは、ActionImplを登録するdiconにインタセプタを記述していたのですが、
SAStrutsではcustomizer.dicon という専用のdiconがあってそこに書くようになっています。


<!-- Actionのpublicメソッド実行時に適用 -->
<!-- Loginチェックを行うInterceptor -->
<!-- Loginページは該当しない -->
<initMethod name="addCustomizer">
<arg>
<component class="org.seasar.framework.container.customizer.AspectCustomizer">
<property name="interceptorName">"loginConfirmInterceptor"</property>
<initMethod name="addIgnoreClassPattern">
<arg>"jp.go.nta.hogeop.eq.action.z"</arg>
<arg>"LoginAction"</arg>
</initMethod>
</component>
</arg>
</initMethod>

【参考】
http://sastruts.seasar.org/featureReference.html

Sesar2 Dao実体化を2段階に分けるdiconファイル

メモ

                                                                                      • -


<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">

<components namespace="dao">
<!-- デフォルトのdao.diconを転記 ここから-->
<include path="j2ee.dicon"/>
<component class="org.seasar.dao.impl.AnnotationReaderFactoryImpl"/>
<component class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
<component
name="interceptor"
class="org.seasar.dao.pager.PagerS2DaoInterceptorWrapper">
<arg>
<component class="org.seasar.dao.interceptors.S2DaoInterceptor"/>
</arg>
</component>
<component class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
<component name="stringClobType">
@org.seasar.dao.types.ValueTypes@CLOB
</component>
<component class="org.seasar.dao.impl.BeanMetaDataFactoryImpl"/>
<component class="org.seasar.dao.impl.DaoNamingConventionImpl"/>
<component class="org.seasar.dao.impl.NullBeanEnhancer"/>
<component class="org.seasar.dao.impl.ResultSetHandlerFactorySelector"/>
<component class="org.seasar.dao.impl.DtoMetaDataFactoryImpl"/>
<component class="org.seasar.dao.impl.PropertyTypeFactoryBuilderImpl"/>
<component class="org.seasar.dao.impl.RelationPropertyTypeFactoryBuilderImpl"/>
<component class="org.seasar.dao.impl.DefaultTableNaming"/>
<component class="org.seasar.dao.impl.DefaultColumnNaming"/>
<component class="org.seasar.dao.impl.ProcedureMetaDataFactoryImpl"/>

<!-- デフォルトのdao.diconを転記 ここまで-->

<component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
<property name="autoNaming">
<component class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/>
</property>
<initMethod name="addClassPattern">
<arg>"hoge"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>

<!-- SqlCheckInterceptorを適用 -->
<component name="sqlCheckInterceptor" class="hoge.common.interceptor.SqlCheckInterceptor"/>

<!-- TrimInterceptorを適用 -->
<component name="trim" class="hoge.common.interceptor.TrimInterceptor"/>

<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">dao.interceptor</property>
<initMethod name="addClassPattern">
<arg>"hoge.common.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>


<!-- Dao実行時ではなくActionImpi実行時に処理するため actionimpl.dicon に移動 -->
<!-- LogTableInterceptorを適用 -->
<!-- <component name="logTableInterceptor" class="hoge.common.interceptor.LogTableInterceptor"/> -->
<!--
<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">logTableInterceptor</property>
<initMethod name="addClassPattern">
<arg>"hoge.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component> -->

<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">sqlCheckInterceptor</property>
<initMethod name="addClassPattern">
<arg>"hoge.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>

<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">dao.interceptor</property>
<initMethod name="addClassPattern">
<arg>"hoge.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>


</components>

form.submit(); が出来ないとき!

form.submit()は、formの要素内に「submit」という名前のものがあると、動きません。

                                                                                      • -

<script>
function changeList(value) {
window.alert(value);
var form = document.getElementsByTagName("form")[0];
form.action = value;
form.submit();
}
//-->
</script>

                                                                                      • -


これで、jsp内に、

があると、エラーとなります。



などに書き換えましょう。



【参考URL】
http://www.inworks.jp/archives/130