Seasar DI Container with AOP

S2DaoExercise

S2Daoの理解度をチェックします。下記の問題に関して当てはまるものを1つ選んでチェックを入れたら、下の「解答へGO」ボタンをクリックしてください。

JavaBeansに関する問題

【問題1】
JavaBeansのクラス名がEmployeeでテーブル名はEMPとする場合、JavaBeansとテーブルの関連付けを行う定数の宣言は以下のどれでしょう?
ヒント:TABLEアノテーションを参照してください。

1). public static final String Employee_TABLE = "EMP";
2). public static final String TABLE = "Employee_EMP";
3). public static final String TABLE = "EMP";
4). private static final String TABLE = "EMP";

【問題2】
プロパティ名がemployeeNoとEMPテーブルのカラム名がEMPNOを関連付ける定数の宣言は以下のどれでしょう?
ヒント:COLUMNアノテーションを参照してください。

1). public static final String employeeNo = "EMPNO";
2). private static final String employeeNo_COLUMN = "EMPNO";
3). public static final String employeeNo_COLUMN = "EMPNO";
4). public final String employeeNo_COLUMN = "EMPNO";

【問題3】
プロパティ名がenameとEMPテーブルのカラム名がENAMEを関連付ける定数の宣言は以下のどれでしょう?
ヒント:COLUMNアノテーションを参照してください。

1). public static final String ename_EMP = "ENAME";
2). public static final String ename = "EMP_ENAME";
3). public static final String ename = "ENAME_COLUMN";
4). 宣言する必要はない。

【問題4】
EMPテーブルとSEC,DEPTテーブルがN:1マッピングされるときのRELNO定数の宣言は以下どれでしょう?SECテーブルと関連付けされているJavaBeansクラスはSection、DEPTテーブルに関連付けされているJavaBeansクラスはdepartmentとする。
ヒント:N:1マッピングを参照してください。

1). public static final int section_RELNO = 0; public static final int department_RELNO = 0;
2). public static final int section_RELNO = 0; public static final int department_RELNO = 1;
3). public static final String section_RELNO = "0"; public static final String department_RELNO = "1";
4). public static final int[ ] section_department_RELNO = {0,1};

【問題5】
EMPテーブルのDEPTNOカラムとDEPTテーブルのDEPTNOを関連付ける場合のRELKEYS定数の宣言は以下のどれでしょう?ただしDEPTテーブルのDEPTNOはプライマリーキーとする。
ヒント:N:1マッピングを参照してください。

1). public static final String department = "DEPTNUM:DEPTNO";
2). public static final String department_RELKEYS = "DEPTNUM,DEPTNO";
3). public static final String department = "DEPTNO_RELKEYS";
4). 宣言する必要はない。

【問題6】
EMPテーブルのDEPTNUMカラムとDEPTテーブルのDEPTNO、EMPテーブルのDEPTKEYカラムとDEPTテーブルのDEPTIDカラムを関連付ける場合の宣言は以下のどれでしょう?
ヒント:N:1マッピングを参照してください。

1). public static final String department_RELKEYS = "DEPTNUM:DEPTKEY,DEPTNO:DEPTID";
2). public static final String department_RELKEYS = "DEPTNUM:DEPTNO,DEPTKEY:DEPTID";
3). public static final String department_RELKEYS = "DEPTNUM,DEPTNO:DEPTKEY,DEPTID";
4). 宣言する必要はない。


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

【問題1】
EmployeeDaoクラスがEmployeeエンティティに関連付けられるようにするための宣言は以下のどれでしょう?
ヒント:BEANアノテーションを参照してください。

1). public static final Class BEAN = Employee.class
2). public static final Class Employee = BEAN.class
3). public static final String BEAN = "Employee.class"
4). 宣言する必要はない。

【問題2】
public Employee getEmployee(int employeeno)というメソッドが定義されていた場合、正しいARGSアノテーション宣言は以下のどれでしょう? メソッドの引数に対応するテーブルのカラム名はempnoとする。
ヒント:ARGSアノテーションを参照してください。

1). public static final String getEmployee_ARGS = "employeeno";
2). public static final String getEmployee_ARGS = "empno";
3). public static final String ARGS_getEmployee = "empno";
4). public static final String empno = "getEmployee_ARGS";

【問題3】
public List getEmployeeByJobDeptno(String job, Integer deptno)というメソッドが定義されていた場合、正しいARGSアノテーション宣言は以下のどれでしょう? メソッドの引数名と対応するテーブルのカラム名は同じとする。
ヒント:ARGSアノテーションを参照してください。

1). public String getEmployeeByJobDeptno_ARGS = "job:deptno";
2). public String getEmployeeByJobDeptno_ARGS = "job,deptno";
3). public String getEmployeeByJobDeptno_ARGS = "job deptno";
4). 推奨されていないが省略することができる。

【問題4】
SQLが自動生成されるpublic List getEmployeesBySal(Float minSal, Float maxSal)というメソッドで引数でSal(給与)の上限と下限を指定する場合、WHERE句を追加するQUERYアノテーションはどれでしょう?
ヒント:QUERYアノテーションを参照してください。

1). public static final String getEmployeesBySal_QUERY =
"sal BETWEEN 'minSal' AND 'maxSal' ORDER BY empno";
2). public static final String getEmployeesBySal_QUERY =
"sal BETWEEN /*?*/ AND /*?*/ ORDER BY empno";
3). public static final String getEmployeesBySal_QUERY =
"sal BETWEEN ? AND ? ORDER BY empno";
4). 宣言する必要はない。

【問題5】
QUERYアノテーションにSQLコメントを使用した正しい例は以下のどれでしょう?
ヒント:QUERYアノテーションを参照してください。

1). public static final String getEmployees_QUERY =
"job = ?'CLERK'/*IF deptno != null*/ AND deptno = ?20/*END*/;
2). public static final String getEmployees_QUERY_SQLCOMMENT =
"job = /*job*/'CLERK'/*IF deptno != null*/ AND deptno = /*deptno*/20/*END*/";
3). public static final String getEmployees_QUERY =
"job = /*job*/'CLERK'/*IF deptno != null*/ AND deptno = /*deptno*/20/*END*/";
4). QUERYアノテーションでSQLコメントを使用することはできない。

【問題6】
Insert処理を行う場合、正しくないメソッド定義は以下のどれでしょう?
ヒント:メソッドの定義を参照してください。

1). public void deptInsert(Department department);
2). public void insert(Department department);
3). public int addDept(Department department);
4). public int createDept(Department department);

【問題7】
Update処理を行う場合、正しくないメソッド定義は以下のどれでしょう?
ヒント:メソッドの定義を参照してください。

1). public int update(Department department);
2). public int modifyDept(Department department);
3). public void storeDept(Department department);
4). public void commitDept(Department department);

【問題8】
Delete処理を行う場合、正しくないメソッド定義は以下のどれでしょう?
ヒント:メソッドの定義を参照してください。

1). public int delete(Department department);
2). public String deleteDept(Department department);
3). public void removeDept(Department department);
4). public int removeDept(Department department);


diconファイルに関する問題

【問題1】
Dao機能を使用するには、登録したDaoに対して、AOPを適用する必要があります。適用するInterceptorは以下のどれでしょう?
ヒント:diconファイルを参照してください。

1). TraceInterceptor
2). DelegateInterceptor
3). MockInterceptor
4). S2DaoInterceptor

【問題2】
Dao機能を使用する場合、正しいdiconファイルの定義は以下のどれでしょう?S2DaoInterceptorが登録されているdiconファイルはdao.diconとする。
ヒント:diconファイルを参照してください。

1).
<components>
    <include path="dao.dicon"/>
    <component class="example.dao.EmployeeDao"/>
</components>
2).
<components>
    <include path="dao.dicon"/>
    <component class="example.dao.EmployeeDao">
        <arg>dao.interceptor</arg>
    </component>
</components>
3).
<components>
    <component class="example.dao.EmployeeDao">
        <aspect>dao.interceptor</aspect>
    </component>
</components>
4).
<components>
    <include path="dao.dicon"/>
    <component class="example.dao.EmployeeDao">
        <aspect>dao.interceptor</aspect>
    </component>
</components>


SQLファイルに関する問題

【問題1】
EmployeeDaoクラスのgetEmployeeメソッドとSQLファイルを関連付けるための正しいSQLファイル名は以下のどれでしょう?
ヒント:SQLファイルを参照してください。

1). getEmployee.sql
2). EmployeeDao_getEmployee.sql
3). EmployeeDao.sql
4). getEmployee_EmployeeDao.sql


SQLコメントに関する問題

【問題1】
public String getEmployee_ARGS = "empno";
public List getEmployees(int empno);
DAOに上記のようなARGSアノテーションとempno(従業員番号)を指定するメソッドがあった場合、それと対応しているSQLファイルでバインド変数を正しく使用しているのは以下のどれでしょう?
ヒント:SQLコメントを参照してください。

1). SELECT * FROM emp WHERE empno = /*empno 7788*/
2). SELECT * FROM emp WHERE empno = 7788/*empno*/
3). SELECT * FROM emp WHERE empno = /*empno*/7788
4). SELECT * FROM emp WHERE empno = /* empno*/7788

【問題2】
public String getEmployeeCommBy_ARGS = "comm";
public List getEmployeesByComm(Float comm);
DAOに上記のようなARGSアノテーションとComm(手数料)を指定するメソッドがあった場合、SQL文の条件を 「Commがnullでなければその値を条件にして、nullであれば0とする」 としたいとき、以下のSQL文にその条件を記述する方法は以下のどれでしょう?
SELECT emp.*, dept.dname dname_0, dept.loc loc_0 FROM emp, dept WHERE emp.deptno = dept.deptno
ヒント:SQLコメントを参照してください。

1). /*IF comm != null*/comm = /*comm*/300 -- ELSE comm = 0 /*END*/
2). /*and IF comm != null*/comm = /*comm*/300 -- and ELSE comm = 0 /*END*/
3). /*IF comm != null*/ and comm = /*comm*/300 /*ELSE*/ and comm = 0 /*END*/
4). /*IF comm != null*/ and comm = /*comm*/300 -- ELSE and comm = 0 /*END*/

【問題3】
SELECT * FROM EMP
/*BEGIN*/WHERE
/*IF job != null*/job = /*job*/'CLERK'/*END*/
/*IF deptno != null*/AND deptno = /*deptno*/20/*END*/
/*END*/
SQLファイルに上記のようなSQL文が記述されています。実行時に引数jobとdeptnoがnullの場合、以下のどのSQL文が発行されるでしょう?
ヒント:SQLコメントを参照してください。

1). SELECT * FROM EMP WHERE
2). SELECT * FROM EMP WHERE job = null and deptno = null
3). SELECT * FROM EMP
4). SQL文は発行されない


EntityManagerに関する問題

【問題1】
EntityManagerを使用してQueryを実行したい場合、そのクラス定義の方法で正しいのは以下のどれでしょう?DAOはEmployeeDaoインターフェースとする。
ヒント:EntityManagerを使用したQueryの実行を参照してください。

1). public class EmployeeDaoImpl extends EmployeeDao implements AbstractDao
2). public class EmployeeDaoImpl extends AbstractDao implements EmployeeDao
3). public class EmployeeDaoImpl implements AbstractDao, EmployeeDao
4). public class EmployeeDaoImpl implements EmployeeDao

【問題2】
EntityManagerのメソッドを使用してQueryを実行したい場合、バインドしたい引数が4つ以上のときは、以下のどの方法が正しいでしょう?
ヒント:EntityManagerを使用したQueryの実行を参照してください。

1). public List findManyArgs(String query, Object arg1, Object arg2, Object arg3, Object arg4);
2). public List find(String query, Object arg1, Object arg2, Object arg3, Object arg4);
3). public List find(String query, Object[] args);
4). 用意されているメソッドでは、3つまでしかバインドすることができないので4つ以上は不可能。

【問題3】
EntityManagerのメソッドを使用して結果をListで受け取りたい場合、正しいメソッドは以下のどれでしょう?
ヒント:EntityManagerを使用したQueryの実行を参照してください。

1). public List findList(String query);
2). public List getList(String query);
3). public List find(String query);
4). public List get(String query);

【問題4】
EntityManagerのメソッドを使用して結果を配列で受け取りたい場合、正しいメソッドは以下のどれでしょう?
ヒント:EntityManagerを使用したQueryの実行を参照してください。

1). public Object[] findArray(String query);
2). public Object[] getArray(String query);
3). public Object[] find(String query);
4). public Object[] get(String query);

【問題5】
EntityManagerのメソッドを使用して結果をJavaBeansで受け取りたい場合、正しいメソッドは以下のどれでしょう?
ヒント:EntityManagerを使用したQueryの実行を参照してください。

1). public Object getBean(String query);
2). public Object findJavaBeans(String query);
3). public Object get(String query);
4). public Object findBean(String query);

【問題6】
EntityManagerのメソッドを使用して結果をcount(*)の結果のような単独の値で受け取りたい場合、正しいメソッドは以下のどれでしょう?
ヒント:EntityManagerを使用したQueryの実行を参照してください。

1). public Object findBean(String query);
2). public Object findObject(String query);
3). public Object getObject(String query);
4). public Object find(String query);


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

【問題1】
更新SQL文の自動生成で正しい説明を述べているのは以下のどれでしょう?
ヒント:更新SQLの自動生成を参照してください。

1). メソッド名の命名規則は守らなくてもよい。
2). メソッドの戻り値には何を指定してもよい。
3). メソッドの引数には必ずJavaBeansを指定する。
4). SQLファイルは必ず作成する。


バッチ更新に関する問題

【問題1】
自動的に更新SQL文を生成し、バッチ更新するための正しいメソッドの定義は以下のどれでしょう?
ヒント:バッチ更新を参照してください。

1). public int insertBatch(Employee[] employees);
2). public Employee[] insertBatch();
3). public int insertBatch(Map map);
4). public int insertBatch(Employee employee);


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

【問題1】
検索SQL文を自動生成するための正しいメソッドの定義は以下のどれでしょう?
ヒント:検索SQLの自動生成 メソッドの定義を参照してください。

1). public Employee insertEmployee(Integer empno);
2). public String getEmployeeByEmpno(Integer empno);
3). public Employee getEmployeeByEmpno(Integer empno);
4). public Map getEmployeeByEmpno(Integer empno);

【問題2】
SELECT * FROM EMP WHERE empno = /*empno*/7788
上記の手動で作成したSQL文と同様のSQL文を自動で生成したい場合、正しいメソッドの定義は以下のどれでしょう?ただしempnoはプライマリーキーです。
ヒント:検索SQLの自動生成 を参照してください。

1). public List getEmployees()
2). public Employee getEmployee()
3). private Employee getEmployeeByEmpno(int empno)
4). public Employee getEmployeeByEmpno(int empno)

【問題3】
SELECT * FROM emp
/*BEGIN*/WHERE
/*IF deptno != null*/deptno = /*deptno*/20/*END*/
/*END*/
上記の手動で作成したSQL文と同様のSQL文を自動で生成したい場合、正しいメソッドの定義は以下のどれでしょう?
ヒント:検索SQLの自動生成 を参照してください。

1). public List getEmployeesByDeptno()
2). public Employee getEmployeesByDeptno()
3). public List getEmployeeByDeptno(int deptno)
4). public List getEmployeeByDeptno(Integer deptno)