Seasar S2JDBC DtoとService生成¶
概要¶
この業務スケルトンは、SQLファイルからDtoクラスとServiceクラスを生成します。エンティティ生成の業務スケルトンと異なり、SQLファイルのSQLを実行するServiceを生成します。このため、複雑なSQLの場合に有効です。ここでは、この業務スケルトンの使用方法と制限事項について説明します。
使用方法¶
アプリケーションルートパッケージ、アプリケーションパスを決定します。
データベースにSQLファイルで使用するテーブルをあらかじめ作成しておきます。
SQLファイルを配置します。SQLファイルの命名方法と配置場所については、「SQLファイル」を参照してください。業務スケルトンを実行し、「DtoとService生成」を選択します。
アプリケーションルートパッケージ、アプリケーションパスを入力します。
スキーマを選択します。
終了をクリックします。
- エラーがある場合は、メッセージが示しているSQLファイルを修正してください。
入力Dto、出力Dto、Serviceクラスが出力されます。出力ファイルの形式については、「出力ファイル」を参照してください。
SQLファイル¶
SQLファイルの配置場所やファイル名が、出力するDtoクラスやServiceクラスのクラス名、メソッド名に対応します。
SQLファイルの配置場所src/main/resources配下に、以下の形式のディレクトリの下にsqlファイルを配置します。META-INF/sql/アプリケーションパス/クラス名「クラス名」の部分がServiceのクラス名「クラス名Service」、Dtoのクラス名「クラス名InDto」、「クラス名OutDto」になります。クラス名部分は、Javaのクラス名として正しい名前を付けてください。 SQLファイルの形式「メソッド名」の部分がServiceクラスの当SQLを発行するメソッドのメソッド名になります。メソッド名部分はアルファベットと数値のみが使用できます。Serviceクラスのメソッド名に対応しますので、Javaのメソッド名として正しい名前を付けてください。ファイル名のサフィックスは「.sql」とします。SQL文は、2way SQLで記述します。「S2JDBC SQLファイルによる操作」を参照してください。2way SQLの例SELECT id, category, name FROM tbl_item WHERE category IN /*categories*/('computer') ORDER BY /*$order*/id
出力ファイル¶
出力するファイルは、入力、出力Dto、Serviceクラスです。 各クラスのパッケージ、クラス名などは以下の通りです。
入力、出力Dtoクラス
パッケージ「アプリケーションルートパッケージ.dto.アプリケーションパス」形式 クラス名入力Dtoクラス名: SQLファイルのクラス名部分 + メソッド名(Pascal形式) + InDto出力Dtoクラス名: SQLファイルのクラス名部分 + メソッド名(Pascal形式) + OutDto 内容プロパティのアクセス修飾子はpublicです。getter、setterはありません。Serviceクラス
パッケージ「アプリケーションルートパッケージ.service.アプリケーションパス」形式 クラス名SQLファイルのクラス名部分 + Service
- 例
以下の設定、SQLファイルがある場合
アプリケーションルートパッケージ jp.co.sample アプリケーションパス item sqlファイル META-INF/sql/item/List/findByName.sqlMETA-INF/sql/item/List/findByCategories.sql出力されるクラスは以下の通りです。
Serviceクラス jp.co.sample.service.item.ListService findByNameのDtoクラス jp.co.sample.dto.item.ListFindByNameInDtojp.co.sample.dto.item.ListFindByNameOutDtofindByCategoriesのDtoクラス jp.co.sample.dto.item.ListFindByCategoriesInDtojp.co.sample.dto.item.ListFindByCategoriesOutDto
対応するデータ型¶
データベースのカラムの型とそれに対応するDtoクラスのプロパティの型は以下の通りです。
カラムの型 Javaの型 oracle postgresql 文字列型 varcharvarchar2char varcharchartextString 数値型 bigintintegersmallintjava.math.BigInteger number(n,0) numeric(n,0) java.math.BigInteger number(n,m)m != 0 numeric(n,m)m != 0java.math.BigDecimal real Float double precision Double 日付型 date date java.util.Date time java.sql.Time timestamp timestamp java.sql.Timestamp 上の表にない型(論理型、通貨型、ラージオブジェクト型)は対応していません。Stringクラスとして出力されます。
制限事項¶
SELECT文のみに対応しています。INSERTやUPDATEなどは対象外です。
条件句の左辺のコメント変数を取得できません。 右辺にコメント変数を記述してください。
WHERE id = /*id*/1 -- ok AND /*name*/'aoyagi' = name -- ngサブクエリのカラムの型を解決できません。
例1 SELECT句中の例SELECT id, -- item_nameを型解決できない (SELECT name FROM item_table WHERE id = base.id) AS item_name, ... 例2 WHERE句中の例-- totalを型解決できない (SELECT SUM(price) FROM item WHERE item_type = base.item_type) > /*total*/100CASE式のカラムの型を解決できません。
例1 SELECT句中の例SELECT id, -- item_nameの型解決できない CASE item_type WHEN /*itemTypeA*/'A' THEN name, WHEN /*itemTypeB*/'B' THEN detail_name, ELSE short_name END AS item_name 例2 WHERE句中の例-- thresholdの型解決できない CASE item_type WHEN 'A' THEN height ELSE width END > /*threshold*/100日付型 + 数値型の型解決について
colA + colB = /*var*/10 のようにした場合、varの型は左辺の1番目のカラムの型で解決します。
date1 + 7 = /*var*/'2000-01-01' -- varは日付型になる 7 + date1 = /*var*/100 -- varは数値型になる対応している関数について
以下の関数に対応しています。また、その型の扱いは以下の通りです。
関数 型 SUM パラメータと同じ型 AVG パラメータと同じ型 CHAR String CEILING java.math.BigInteger CEIL java.math.BigInteger FLOOR java.math.BigInteger MOD java.math.BigInteger POWER パラメータが整数の場合java.math.BigIntegerそれ以外の場合DoubleROUND パラメータと同じ型 SIGN パラメータが整数の場合java.math.BigIntegerそれ以外の場合DoubleCONCAT String CORRELATION Double CORR Double COUNT java.math.BigInteger MAX パラメータと同じ型 MIN パラメータと同じ型 STDDEV Double VARIANCE Double ABS パラメータと同じ型 ACOS Double ASCII java.math.BigInteger ASIN Double ATAN Double ATAN2 Double CHR String COALESCE String COS Double COSH Double COT Double DEGREES Double EXP Double LOWER パラメータと同じ型 LENGTH java.math.BigInteger LN Double LOG Double LTRIM パラメータと同じ型 NULLIF パラメータと同じ型 RTRIM パラメータと同じ型 SIN Double SINH Double SQRT Double TAN Double TANH Double TO_DATE java.sql.Timestamp TRUNC パラメータと同じ型 UPPER String 例
SELECT -- 出力される型はcol_numberに対応するJavaの型となる SUM(col_number1) AS total ... HAVING -- 出力されるlower_limitの型はcol_number2に対応するJavaの型となる MAX(col_number2) > /*lower_limit*/10ネストしたコメント変数には対応していません。 以下の様なネストした変数は対応していません。
-- department.attach.user.user_cd のようなネストした変数には対応していません user_cd = /*department.attach.user.user_cd*/'aoyagi' -- paging.orderのようなネストした変数には対応していません ORDER BY /*$paging.order*/user_cd