Java Seasar2とは? 入門と使い方

SeasarはJava用Webアプリケーションフレームワークである。

Seasarとは

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が提供するパッケージを次に示す。

org.seasar.framework.aop.annotation
コンポーネントにインターセプタを適用するアノテーションを提供する。
org.seasar.framework.beans.util
JavaBeansやMapのユーティリティを提供する。
org.seasar.s2csv.annotation
CSVのアノテーションを提供する。
org.seasar.s2csv.annotation.column
CSVフィールドのアノテーションを提供する。
org.seasar.s2csv.annotation.entity
CSVエンティティのアノテーションを提供する。
org.seasar.extention.jdbc
S2JDBCの機能を提供する。
org.seasar.struts.annotaion
SAStrutsのアノテーションを提供する。

アノテーション

Seasarには次のアノテーションが用意されている。

アノテーション 説明
@RemoveSession HTTPセッションから属性を削除する。
@CSVValidator フィールドのバリデーション実行メソッドを指定する。
@CSVColumn CSV関連項目であることを示す。
@CSVMaxByteLength フィールドの最大バイト数をチェックする。
@CSVMinByteLength フィールドの最小バイト数をチェックする。
@CSVRequired フィールドの必須チェックを行う。
@CSVEntity クラスがCSVエンティティであることを示す。

@RemoveSession

注釈をつけたメソッドが実行された後に、指定した属性がHTTPセッションから削除される。

@org.seasar.framework.aop.annotation.RemoveSession[(key=value [, ...])]
name
注釈をつけられたメソッドが実行された後にHTTPセッションから削除される属性のセット。必須。
@RemoveSession(name={"fooDto", "fooForm"})
@Execute(validator=false)
public String logout() {
  return "/index";
}

@CSVValidator

このアノテーションを付けたフィールドのバリデーション実行メソッドを指定する。

@org.seasar.s2csv.csv.annotation.CSVValidator[(key=value [, ...])]
msgKey

バリデーションエラー時のメッセージキーを指定する。

args

バリデーションエラー時のメッセージ引数を指定する。

method

バリデーション実行メソッドを指定する。

methodClass

バリデーション実行メソッドがあるクラスを指定する。デフォルトはCSVエンティティクラスである。

@CSVColumn

このフィールドがCSV関連項目であることを示す。

@org.seasar.s2csv.csv.annotation.column.CSVColumn[(key=value [, ...])]
columnIndex

CSVデータのカラム位置を0から始まる番号で指定する。

@CSVMaxByteLength

このアノテーションを付けたフィールドの最大バイト数をチェックする。

@org.seasar.s2csv.csv.annotation.column.CSVMaxByteLength[(key=value [, ...])]
msgKey

バリデーションエラー時のメッセージキーを指定する。

args

バリデーションエラー時のメッセージ引数を指定する。

maxbytelength

最大バイト数を指定する。

charset

文字コードを指定する。

@CSVMinByteLength

このアノテーションを付けたフィールドの最小バイト数をチェックする。

@org.seasar.s2csv.csv.annotation.column.CSVMinByteLength[(key=value [, ...])]
msgKey

バリデーションエラー時のメッセージキーを指定する。

args

バリデーションエラー時のメッセージ引数を指定する。

minbytelength

最小バイト数を指定する。

charset

文字コードを指定する。

@CSVRequired

このアノテーションを付けたフィールドの必須チェックを行う。

@org.seasar.s2csv.csv.annotation.column.CSVRequired[(key=value [, ...])]
msgKey

バリデーションエラー時のメッセージキーを指定する。

args

バリデーションエラー時のメッセージ引数を指定する。

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;
}

@CSVEntity

このアノテーションを付けたクラスがCSVエンティティであることを示す。

@org.seasar.s2csv.csv.annotation.entity.CSVEntity[(key=value [, ...])]
header

true (デフォルト)を指定した場合、CSVデータを読み込み際にCSVファイルの1行目はヘッダと見做して、2行目からデータを読み込む。CSVデータを書き出す際にはヘッダ行を出力する。 false を指定した場合、CSVデータを読み込む際にCSVファイルの1行目からデータを読み込む。CSVデータを書きだす際にはヘッダ行を出力しない。

S2JDBC

S2JDBCは、Javaの標準的な永続化APIであるJava Persistence API (JPA)を基にしたデータアクセスのためのフレームワークである。開発者が書いたSQLを実行したり、SQLを自動生成することができる。

jdbc.dicon

jdbc.diconは、データベース接続用の設定ファイルであり、クラスパスの通っているディレクトリに置く。

外部SQLファイルによる操作

外部SQLファイルとは、SQLをソースコードに記述するのではなく、外部ファイルに記述したものである。SQLファイルはクラスパス上にあるならどこに置いても構わない。SQLファイルのエンコーディングはUTF-8のみサポートされている。外部SQLファイルでは、変数などの埋め込みや条件分岐などをSQLのコメント形式で記述することができる。

SELECT * FROM employee WHERE salary > /*minSalary*/10000

1件検索

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");

SELECT文でIN句を使用する

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();

1件更新・挿入・削除

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();

JdbcManagerインタフェース

org.seasar.extension.jdbc.JdbcManagerはJDBCによるSQLの実行を管理するインタフェースである。

JdbcManagerインタフェースのメソッド
メソッド説明
selectBySqlFileSQLファイル検索を作成する。
getCountBySqlFileselectBySqlで実行可能なSQLが返す結果セットの行数を返す。
updateBySqlFile SQLファイル更新を作成する。
updateBatchBySqlFile SQLバッチファイル更新を作成する。

selectBySqlfile

<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
)
T
戻り値のベースの型
baseClass
ベースクラス
path
SQLファイルのパス
parameter
パラメータ

updateBySqlFile

SQLファイル更新を作成する。

SqlFileUpdate updateBySqlFile(java.lang.String path)
SqlFileUpdate updateBySqlFile(java.lang.String path, java.lang.Object parameter)
path
SQLファイルのパス
parameter
パラメータ

updateBatchBySqlFile

SQLバッチファイル更新を作成する。

<T> SqlFileBatchUpdate<T< updateBatchBySqlFile(java.lang.String path, T... params)
<T> SqlFileBatchUpdate<T< updateBatchBySqlFile(java.lang.String path, java.util.List<T> params)
path
SQLファイルのパス
params
パラメータのリスト

メッセージリソース

<struts-config>
  <message-resources parameter="application"
      factory="org.seasar.struts.util.S2PropertyMessageResourcesFactory" />
</struts-config>

utilパッケージ

org.seasar.framework.beans.utilは、JavaBeansやMapのユーティリティを提供するパッケージである。

org.seasar.framework.beans.utilのクラス
クラス説明
BeanMap String型のキーで、存在しないキーにアクセスすると例外をスローするマップ
BeansJavaBeans用のユーティリティクラス

BeanMapパッケージ

Stringがキーで、存在しないキーにアクセスする(get)と例外を投げるマップ。

コンストラクタ

BeanMap()

メソッド

java.lang.Object get(java.lang.Object key)

Beansパッケージ

org.sesar.framework.beans.util.BeansはJavaBeans用のユーティリティクラスである。

org.sesar.framework.beans.util.Beansのメソッド
メソッド説明
copyプロパティをコピーするオブジェクトを生成する。

copy

static org.seasar.framwork.beans.util.Copy copy(Object src, Object dest)
src

コピー元のオブジェクト

dest

コピー先のオブジェクト

Object1 obj1;
Object2 obj2;

Beans.copy(obj1, obj2).execute();

Fisshplate

FisshplateとはApache POIを拡張したライブラリであり、Excelにテンプレート式を書くことによって、動的にデータが埋め込まれたExcelを出力することができる。

Fisshplateのインストール手順

  1. Fisshplateの公式サイトをWebブラウザで開く。
    http://fisshplate.sandbox.seasar.org/ja/
  2. ダウンロードのページからFisshplate(Fisshplate本体)とS2Fisshplate(FisshplateとSeasarを連携するためのライブラリ)をダウンロードする。
  3. ダウンロードしたzipファイルを解凍する。
  4. 解凍したzipファイルをプロジェクトのライブラリに追加する。

S2Fisshplate

DTOの作成

DTOのクラスには、setterとgetterを作成する。

インタフェースの定義

メソッドの戻り値の型はHSSFWorkbookにする。引数はDTOひとつとする。

Excelテンプレートファイルの作成

Excelテンプレートのファイル名は「インタフェース名_メソッド名.xls」とする。Excelテンプレートファイルはインタフェースと同じパッケージに配置する。

引数のDTOのプロパティは、dataという名前で参照する。たとえば、 EmployeeDto#getEmpno() ${data.empno} で参照できる。

S2CSV

S2CSVは、Seasarとアノテーションを使ってCSVファイルを扱うためのライブラリである。