Seasar DI Container with AOP

S2DaoExerciseの解説

JavaBeansに関する問題の解説

問題1

【解説】
JavaBeansとTableを関連付けるには、以下のように変数を宣言する必要があります。

- public static final String TABLE = “テーブル名”;

1.は変数名に"JavaBeans名_Table"としても関連付けされることはありませんので間違いです。
2.はテーブル名の定義箇所にテーブル名以外のEmployee_EMPのような宣言をしても関連付けされることはありませんので間違いです。
4.は修飾子がprivateなので間違いです。

<< 問題へ戻る
次の問題へ>>

問題2

【解説】
JavaBeansのプロパティ名とテーブルにカラム名が異なる場合、以下のように変数を宣言して関連付ける必要があります。

- public static final String プロパティ名_COLUMN = "カラム名";

1.はプロパティ名だけなので間違いです。
2.は修飾子がprivateなので間違いです。
4.は定数宣言に必要なstaticがないので間違いです。

<< 問題へ戻る
次の問題へ>>

問題3

【解説】
JavaBeansのプロパティ名とカラム名が同じ場合、変数の宣言をする必要はありません。ただしプロパティ名とカラム名が同じ場合でもプロパティ名_COLUMN = カラム名として関連付けることができます。

1.プロパティ名をプロパティ名_テーブル名としても間違いです。
2.カラム名をはテーブル名_カラム名としても間違いです。
4.カラム名をカラム名_COLUMNとしても間違いです。

<< 問題へ戻る
次の問題へ>>

問題4

【解説】
N:1マッピングを使用するには、RELKEYS定数をそれぞれ宣言する必要があり、またRELNO定数は、N:1マッピングの連番になるので以下のように0から付けていく必要があります。

- public static final int プロパティ名_RELNO = 0;

- public static final int プロパティ名_RELNO = 1;

1.はRELNO定数は連番なので同じ番号を付けることできないので間違いです。
3.RELNO定数はintで宣言するので間違いです。
4.配列にして一つにまとめて宣言することはできないので間違いです。

<< 問題へ戻る
次の問題へ>>

問題5

【解説】
N:1マッピングのキーはRELKEYS定数で指定する場合、1側のテーブルのカラム名がN側のテーブルのカラム名に等しい場合は、1側のテーブルのカラム名を省略することができ、また1側のテーブルのカラム名がプライマリーキーの場合、RELKEYS定数を省略することができます。

1.はプロパティ名に_RELKEYSがついていないので間違いです。
2.は"DEPTNUM,DEPTNO"となっており":"ではないく","になっているので間違いです。
3.はカラム名_RELKEYSとしても間違いです。

<< 問題へ戻る
次の問題へ>>

問題6

【解説】
N:1マッピングのキーはRELKEYS定数で指定します。また キーが複数ある場合には、カンマ( , )で区切って指定するのでRELKEYS定数は以下の形式になります。

- public static final String プロパティ名_RELKEYS = "N側のカラム名: 1側のカラム名,N側のカラム名: 1側のカラム名・・・";

1.は"N側のカラム名: N側のカラム名,1側のカラム名:1側のカラム名"となっているの間違いです。
3.は"N側のカラム名, 1側のカラム名:N側のカラム名,1側のカラム名"となっていて":"と","が逆になっているので間違いです。
4.は1側のカラム名がN側のカラム名に等しい場合は、1側のカラム名を省略することができ、また1側のカラム名とN側のカラム名に等しく、1側のカラム名がプライマリーキーの場合、RELKEYS定数を省略することができまが、この場合どれも同じでないので省略はできません。

<< 問題へ戻る
次の問題へ>>

Dao(Data Access Object)に関する問題の解説

問題1

【解説】
DaoがどのJavaBeans(エンティティ)に関連付けられているのかはBEANアノテーションで指定します。指定する場合は以下の形式で定数を宣言します。

- public static final Class BEAN = JavaBeans名.class;

2.はJavaBeans名.classのところにBEAN.classとなっており、BEANとするところがEmployeeになっているので間違いです。
3.はString型で宣言しているので間違いです。
4.はDaoとJavaBeans(エンティティ)を関連付ける場合は、省略できないので間違いです。

<< 問題へ戻る
次の問題へ>>

問題2

【解説】ARGSアノテーションは以下の形式で宣言します。"テーブルのカラム名"にはメソッドの引数名ではなく、引数に対応するテーブルのカラム名を指定することに注意してください。また、引数が1つの場合、ARGSアノテーションは省略することが可能ですが、明示的に指定することを推奨します。テーブルのカラム名以外に、JavaBeansやDTOも指定することができます。

- public static final String メソッド名_ARGS = "テーブルのカラム名";

1.はメソッドの引数名を指定しているので間違いです。
3.は定数名がARGS_メソッド名となっているので間違いです。
4.はテーブルのカラム名が定数名で、メソッド名_ARGSが定数値になっているので間違いです。

<< 問題へ戻る
次の問題へ>>

問題3

【解説】引数が複数ある場合はカンマ区切りで宣言します。また、引数が1つの場合は省略可能ですが、複数ある場合は必ず宣言する必要があります。

1.はコロン区切りなので間違いです。
3.はスペース区切りなので間違いです。
4.は引数が複数ある場合は省略できなので間違いです。

<< 問題へ戻る
次の問題へ>>

問題4

【解説】自動的に生成されるSELECT文にWHERE句やORDER BY句を追加するには、QUERYアノテーションを使用し、またバインド変数を使用するには以下のように宣言します。

- public static final String メソッド名_QUERY = "WHERE カラム名 = ? ORDER BY句";

1.はバインド変数を?以外のメソッドの引数名にしてもメソッドの引数の値が代入されることはないので間違いです。
2.はバインド変数の?を/* */で囲む必要はないので間違いです。
4.はメソッドに引数があるのでQUERYアノテーションを省略することはできないので間違いです。

<< 問題へ戻る
次の問題へ>>

問題5

【解説】QUERYアノテーションでSQLコメントを使用することができます。

この問題のQUERYアノテーションは引数deptnoがnullでない場合、deptnoが引数の値と一致するという条件を追加します。
1.は?としてもSQLコメントではないので間違いです。
2.はQUERYアノテーションの宣言ではないので間違いです。
4.はQUERYアノテーションでSQLコメントは使用できるので間違いです。

<< 問題へ戻る
次の問題へ>>

問題6

【解説】
INSERT処理を行う場合のメソッド名は、insert,add,createではじまる必要があります。deptInsertはdeptからはじまるため、正しくありません。

<< 問題へ戻る
次の問題へ>>

問題7

【解説】
UPDATE処理を行う場合のメソッド名は、update,modify,storeではじまる必要があります。commitではじまるメソッド名はサポートされていないため、正しくありません。

<< 問題へ戻る
次の問題へ>>

問題8

【解説】
DELETE処理を行う場合のメソッド名は、delete,removeではじまる必要があり、戻り値はvoidあるいはintでなければなりません。戻り値にString型は定義できないため、正しくありません。

<< 問題へ戻る
次の問題へ>>

diconファイルに関する問題の解説

問題1

【解説】
Dao機能で使用するInterceptorはorg.seasar.dao.interceptors.S2DaoInterceptorです。

1.はトレース処理をCrosscutting Concernとして扱うためのInterceptorなので間違いです。
2.は例外処理をCrosscutting concernとして扱うためのInterceptorなので間違いです。
3.はMockを使ったテストを簡単に行うためのInterceptorなので間違いです。
1,2,3のInterceptorについてはS2AOPで用意されているInterceptorを参照して下さい。

<< 問題へ戻る
次の問題へ>>

問題2

【解説】
Dao機能を使用するにはorg.seasar.dao.interceptors.S2DaoInterceptorを登録したDaoに対してAOPを適用する必要があります。

1.はEmployeeDaoにアスペクトを適用していないので間違いです。
2.はタグではなく、タグを使用しているので間違いです。
3.はdao.diconをインクルードしていないので間違いです。

<< 問題へ戻る
次の問題へ>>

SQLファイルに関する問題の解説

問題1

【解説】
DaoのメソッドとSQLファイルを結び付けるには、以下のような規則で命名する必要があります。

- Daoのクラス名_メソッド名.sql

1.は"メソッド名.sql"としても関連付けされることはありませんので間違いです。
3.は"Dao名.sql"としても関連付けされることはありませんので間違いです。
4.は"メソッド名_Dao名.sql"としても関連付けされることはありませんので間違いです。

<< 問題へ戻る
次の問題へ>>

SQLコメントに関する問題の解説

問題1

【解説】
Daoに定義したメソッドの引数の値をSQL文で使用する場合は、SQL文にバインド変数コメントを記述します。 バインド変数コメントの右側のリテラルに引数の値が自動的に置換され実行されます。 バインド変数コメントは、以下のように記述します。

- /*引数名*/リテラル

1.リテラルがコメントの中に入っているので間違いです。
2.リテラルはコメントの後ろになるので間違いです。
4.は(/*)の後ろにスペースが入っているので、普通のコメントとなり間違いです。

<< 問題へ戻る
次の問題へ>>

問題2

【解説】
IFコメントでは、条件に応じて実行するSQL文を変えることが可能です。IFコメントは以下の形式で記述します。

- /*IF 条件*/ ... -- ELSE 条件 .../*END*/

1.問題のSQL文の最後にandが入っていないのでandを入れないと間違いです。
2.andの位置が違うの間違いです。
3.ELSEを/**/で囲んでいるので間違いです。

<< 問題へ戻る
次の問題へ>>

問題3

【解説】
BEGINコメントは、WHERE句内のすべてのELSEを含まないIFコメントがfalseになった場合に、WHERE句自体を出力したくない場合に使います。
1,2.IFコメントがfalseの場合、WHERE句は出力されません。
4.WHERE句が出力されないだけなので、間違いです。

<< 問題へ戻る
次の問題へ>>

EntityManagerに関する問題の解説

問題1

【解説】
EntityManagerを使用するには、以下のクラスを継承します。またインターフェース名が"Dao"で終わっているDAOインターフェースを実装します。

- org.seasar.dao.impl.AbstractDao

1.は継承と実装しているものが逆なので間違いです。
3.はAbstractDaoを実装しているので間違いです。
4.はAbstractDaoを継承していないので間違いです。

<< 問題へ戻る
次の問題へ>>

問題2

【解説】
Object型の引数が4つ以上になる場合は、Object型の配列を使用します。

1.findManyArgsメソッドは定義されていないので間違いです。
2.Objectの引数は3つまでしか定義されていないので間違いです。
4.4つ以上の引数を使用したい場合は、Object型の配列を使用します。

<< 問題へ戻る
次の問題へ>>

問題3

【解説】
戻り値をjava.util.Listで返すには、find()メソッドを使用します。

1,2,4.は定義されていないので間違いです。

<< 問題へ戻る
次の問題へ>>

問題4

【解説】
戻り値を配列で返すには、findArray()メソッドを使用します。

2,3,4.は定義されていないので間違いです。

<< 問題へ戻る
次の問題へ>>

問題5

【解説】
戻り値をJavaBeansで返すには、findBean()メソッドを使用します。

1,2,3.は定義されていないので間違いです。

<< 問題へ戻る
次の問題へ>>

問題6

【解説】
戻り値をcount(*)の結果のような単独の値で返すには、findObject()メソッドを使用します。

1は戻り値をJavaBeansで返すときに使用するので間違いです。
3,4.は定義されていないので間違いです。

<< 問題へ戻る
次の問題へ>>

更新SQLの自動生成に関する問題の解説

問題1

【解説】
更新SQL文の自動生成を行うためには、メソッド名を命名規則にあわせ、JavaBeansを1つ引数に持つメソッドを定義する必要があります。

1.はInsert,Update,Delete処理で定められている命名規則に従う必要があるので間違いです。
2.は戻り値にはvoidあるいはintを指定する必要があるので間違いです。
4.はSQLファイルを作成しなくてもSQL文を自動生成するので間違いです。

<< 問題へ戻る
次の問題へ>>

バッチ更新に関する問題の解説

問題1

【解説】
更新系のメソッドで引数をエンティティのクラスの配列またはListにすると自動的に更新用のSQL文を生成し、バッチ更新をすることができます。

2.は戻り値がエンティティのクラスの配列なので間違いです。
3.は引数がMapなので間違いです。
4.は引数が配列でないので間違いです。

<< 問題へ戻る
次の問題へ>>

検索SQLの自動生成に関する問題の解説

問題1

【解説】
検索処理を行ないたい場合は、戻り値の型を指定します。戻り値の型がjava.util.Listを実装している場合、SELECT文でエンティティのリストを返します。 戻り値がエンティティ型の配列である場合、エンティティ配列を返します。戻り値の型がエンティティの型の場合、エンティティを返します。それ以外の場合、SELECT count(*) FROM empのように1行で1のカラムの値を返すというようにS2Daoは想定します。

1.はメソッド名にinsertが含んでいるので間違いです。
2.は戻り値がStringなので間違いです。
4.は戻り値がMapなので間違いです。

<< 問題へ戻る
次の問題へ>>

問題2

【解説】
メソッドのsignatueより、 S2Daoに自動的にSELECT文を生成させることもできます。ARGSアノテーションにカラム名を指定することで、引数の値によってWHERE句が変わるような動的なSQL文も自動生成できます。

1.は全件検索するSQL文を発行します。
2.は引数の指定がないので間違いです。
3.はprivateメソッドなので間違いです。

<< 問題へ戻る
次の問題へ>>

問題3

【解説】
メソッドのsignatueより、 S2Daoに自動的にSELECT文を生成させることもできます。ARGSアノテーションにカラム名を指定することで、引数の値によってWHERE句が変わるような動的なSQL文も自動生成できます。

1.は全件検索するSQL文を発行します。
2.は引数の指定がないので間違いです。
3.nullの設定ができないので間違いです。

<< 問題へ戻る