SeasarはJava用Webアプリケーションフレームワークである。
SeasarはJava用Webアプリケーションフレームワークである。Seasarプロジェクトには次のプロダクトが含まれている。
Product | Description |
---|---|
S2Container | DI (Dependency Injection)とAOP (Aspect Oriented Programming)のコンテナ |
SAStruts | Strutsを改良したWebアプリケーションフレームワーク |
S2JDBC | JPA (Java Persistence API)を基にしたデータアクセスフレームワーク |
Fisshplate | Apache POIを拡張したライブラリ |
S2CSV | SeasarからCSVを扱うためのライブラリ |
アクションフォームとは、リクエストのパラメータを管理するクラスである。SAStrutsではアクションフォームはPOJOであり、何らかのクラスを継承する必要はない。アクションフォームのクラス名には接尾辞
Form
を付ける。
アクションフォームのクラスには、リクエストのパラメータと同じ名前のプロパティを定義する。
アプリケーションで使うメッセージはメッセージリソースファイルに記述する。ファイル拡張子は
.properties
で、クラスパスの通っているディレクトリに置く。
ファイル名は
struts-config.xml
の
message-resource
タグの
parameter
属性に設定する。
Seasarが提供するパッケージを次に示す。
Seasarには次のアノテーションが用意されている。
アノテーション | 説明 |
---|---|
@RemoveSession | HTTPセッションから属性を削除する。 |
@CSVValidator | フィールドのバリデーション実行メソッドを指定する。 |
@CSVColumn | CSV関連項目であることを示す。 |
@CSVMaxByteLength | フィールドの最大バイト数をチェックする。 |
@CSVMinByteLength | フィールドの最小バイト数をチェックする。 |
@CSVRequired | フィールドの必須チェックを行う。 |
@CSVEntity | クラスがCSVエンティティであることを示す。 |
注釈をつけたメソッドが実行された後に、指定した属性がHTTPセッションから削除される。
@org.seasar.framework.aop.annotation.RemoveSession[(key=value [, ...])]
@RemoveSession(name={"fooDto", "fooForm"})
@Execute(validator=false)
public String logout() {
return "/index";
}
このアノテーションを付けたフィールドのバリデーション実行メソッドを指定する。
@org.seasar.s2csv.csv.annotation.CSVValidator[(key=value [, ...])]
バリデーションエラー時のメッセージキーを指定する。
バリデーションエラー時のメッセージ引数を指定する。
バリデーション実行メソッドを指定する。
バリデーション実行メソッドがあるクラスを指定する。デフォルトはCSVエンティティクラスである。
このフィールドがCSV関連項目であることを示す。
@org.seasar.s2csv.csv.annotation.column.CSVColumn[(key=value [, ...])]
CSVデータのカラム位置を0から始まる番号で指定する。
このアノテーションを付けたフィールドの最大バイト数をチェックする。
@org.seasar.s2csv.csv.annotation.column.CSVMaxByteLength[(key=value [, ...])]
バリデーションエラー時のメッセージキーを指定する。
バリデーションエラー時のメッセージ引数を指定する。
最大バイト数を指定する。
文字コードを指定する。
このアノテーションを付けたフィールドの最小バイト数をチェックする。
@org.seasar.s2csv.csv.annotation.column.CSVMinByteLength[(key=value [, ...])]
バリデーションエラー時のメッセージキーを指定する。
バリデーションエラー時のメッセージ引数を指定する。
最小バイト数を指定する。
文字コードを指定する。
このアノテーションを付けたフィールドの必須チェックを行う。
@org.seasar.s2csv.csv.annotation.column.CSVRequired[(key=value [, ...])]
バリデーションエラー時のメッセージキーを指定する。
バリデーションエラー時のメッセージ引数を指定する。
import org.seasar.s2csv.csv.annotation.column.CSVColumn;
import org.seasar.s2csv.csv.annotation.column.CSVRequired;
public class Emp {
@CSVColumn(columnInex = 0)
@CSVCSVRequired
public int empNo;
}
このアノテーションを付けたクラスがCSVエンティティであることを示す。
@org.seasar.s2csv.csv.annotation.entity.CSVEntity[(key=value [, ...])]
true
(デフォルト)を指定した場合、CSVデータを読み込み際にCSVファイルの1行目はヘッダと見做して、2行目からデータを読み込む。CSVデータを書き出す際にはヘッダ行を出力する。
false
を指定した場合、CSVデータを読み込む際にCSVファイルの1行目からデータを読み込む。CSVデータを書きだす際にはヘッダ行を出力しない。
S2JDBCは、Javaの標準的な永続化APIであるJava Persistence API (JPA)を基にしたデータアクセスのためのフレームワークである。開発者が書いたSQLを実行したり、SQLを自動生成することができる。
jdbc.diconは、データベース接続用の設定ファイルであり、クラスパスの通っているディレクトリに置く。
外部SQLファイルとは、SQLをソースコードに記述するのではなく、外部ファイルに記述したものである。SQLファイルはクラスパス上にあるならどこに置いても構わない。SQLファイルのエンコーディングはUTF-8のみサポートされている。外部SQLファイルでは、変数などの埋め込みや条件分岐などをSQLのコメント形式で記述することができる。
SELECT * FROM employee WHERE salary > /*minSalary*/10000
SQLファイルを使って1件検索する場合は、selectBySqlFile()とgetSingleResult()を組み合わせる。
EmployeeDto result = jdbcManager.selectBySqlFile(
EmployeeDto.class,
"examples/sql/employee/selectSingle.sql"
).getSingleResult();
SQLファイルを使って複数件検索する場合は、selectBySqlFile()とgetResultList()を組み合わせる。
List<EmployeeDto> results = jdbcManager.selectBySqlFile(
EmployeeDto.class,
"examples/sql/employee/selectAll.sql"
).getResultList();
SELECT COUNT(*)による検索結果の行数を取得する場合は、getCountBySqlFile()を使う。
long count = jdbcManager.getCountBySqlFile("examples/sql/employee/selectAll.sql");
S2JDBCのSQLファイルでSELECT文のIN句を使用するには、パラメータに置換されるコメントの直後に括弧付きのサンプルパラメータを指定する。
SELECT * FROM emp WHERE empno IN /*empList*/('emp')
Javaのソースプログラム
String[] params = { "10001", "10002" };
Map<String, Object> mapParams = new HashMap<String, Object>();
mapParams.put("empList", params);
List<EmpDto> resultList = jdbcManager.selectBySqlFile(
EmpDto.class,
"/sql/emp.sql",
mapParams
).getResultList();
SQLファイルを使ってエンティティを更新・挿入・削除する場合、updateBySqlFile()、execute()を組み合わせる。
int count = jdbcManager.updateBySqlFile("examples/sql/employee/update.sql").execute();
SQLファイルを使ってエンティティをバッチ更新・挿入・削除する場合は、updateBatchBySqlFile()、execute()を組み合わせる。
List<Employee> paramList = new ArrayList<Employee>();
Employee entity;
entity.setNo(1);
entity.setName("堀内まり菜");
paramList.add(entity);
entity.setNo(2);
entity.setName("飯田來麗");
paramList.add(entity);
int[] countArray = jdbcManager.updateBatchBySqlFile(
"examples/sql/employee/update.sql",
paramList
).execute();
org.seasar.extension.jdbc.JdbcManagerはJDBCによるSQLの実行を管理するインタフェースである。
メソッド | 説明 |
---|---|
selectBySqlFile | SQLファイル検索を作成する。 |
getCountBySqlFile | selectBySqlで実行可能なSQLが返す結果セットの行数を返す。 |
updateBySqlFile | SQLファイル更新を作成する。 |
updateBatchBySqlFile | SQLバッチファイル更新を作成する。 |
<T> SqlFileSelect<T> selectBySqlFile(java.lang.Class<T> baseClass, java.lang.String)
<T> SqlFileSelect<T> selectBySqlFile(
java.lang.Class<T> baseClass,
java.lang.String,
java.lang.Object parameter
)
SQLファイル更新を作成する。
SqlFileUpdate updateBySqlFile(java.lang.String path)
SqlFileUpdate updateBySqlFile(java.lang.String path, java.lang.Object parameter)
SQLバッチファイル更新を作成する。
<T> SqlFileBatchUpdate<T< updateBatchBySqlFile(java.lang.String path, T... params)
<T> SqlFileBatchUpdate<T< updateBatchBySqlFile(java.lang.String path, java.util.List<T> params)
<struts-config>
<message-resources parameter="application"
factory="org.seasar.struts.util.S2PropertyMessageResourcesFactory" />
</struts-config>
org.seasar.framework.beans.utilは、JavaBeansやMapのユーティリティを提供するパッケージである。
クラス | 説明 |
---|---|
BeanMap | String型のキーで、存在しないキーにアクセスすると例外をスローするマップ |
Beans | JavaBeans用のユーティリティクラス |
Stringがキーで、存在しないキーにアクセスする(get)と例外を投げるマップ。
BeanMap()
java.lang.Object get(java.lang.Object key)
org.sesar.framework.beans.util.BeansはJavaBeans用のユーティリティクラスである。
メソッド | 説明 |
---|---|
copy | プロパティをコピーするオブジェクトを生成する。 |
static org.seasar.framwork.beans.util.Copy copy(Object src, Object dest)
コピー元のオブジェクト
コピー先のオブジェクト
Object1 obj1;
Object2 obj2;
Beans.copy(obj1, obj2).execute();
FisshplateとはApache POIを拡張したライブラリであり、Excelにテンプレート式を書くことによって、動的にデータが埋め込まれたExcelを出力することができる。
DTOのクラスには、setterとgetterを作成する。
メソッドの戻り値の型はHSSFWorkbookにする。引数はDTOひとつとする。
Excelテンプレートのファイル名は「インタフェース名_メソッド名.xls」とする。Excelテンプレートファイルはインタフェースと同じパッケージに配置する。
引数のDTOのプロパティは、dataという名前で参照する。たとえば、
EmployeeDto#getEmpno()
は
${data.empno}
で参照できる。
S2CSVは、Seasarとアノテーションを使ってCSVファイルを扱うためのライブラリである。