はじめに
今回は,
※ サイト更新中にEMechaのバージョンがあがり,
外だしSQLとは?
まずは
外だしSQLは,
SQLは
リスト1:外だしSQLのサンプル-SQLファイル
-- 会員IDと名称の前方一致で絞り込んで,会員一覧と購入最大価格を検索。
-- 絞り込み条件はそれぞれ値がnullじゃければ評価する。
select member.MEMBER_ID
, member.MEMBER_NAME
, (select max(purchase.PURCHASE_PRICE)
from PURCHASE purchase
where purchase.MEMBER_ID = member.MEMBER_ID) as MAX_PURCHASE_PRICE
from MEMBER member
/*BEGIN*/where
/*IF pmb.memberId != null*/member.MEMBER_ID = /*pmb.memberId*/3/*END*/
/*IF pmb.memberName != null*/and member.MEMBER_NAME like /*pmb.memberName*/'ス' || '%'/*END*/
/*END*/
SQLは,
開発者は,
現場ではよく
DBFluteでは,
また,
S2Daoでは本来
実行の仕方
では,
SQLは,
- src/
main/ resources/ sql/ member/ selectMemberWithMaxPurchasePrice. sql
以下のサンプルをご覧下さい。
リスト2:実行の仕方のサンプル
/**
* 会員一覧と最大購入価格をリスト検索。
* 会員名称が「ス」で始まる会員を対象に検索する。
*
* @throws Exception
*/
public void test_OutsideSql_selectList_BasicExecution_Tx() throws Exception {
// ## Arrange ##
final String path = "sql/member/selectMemberWithMaxPurchasePrice.sql";
final MemberWithMaxPurchasePricePmb pmb = new MemberWithMaxPurchasePricePmb();
pmb.setMemberName("ス");
final Class entityType = MemberWithMaxPurchasePrice.class;
// ## Act ##
final List memberList
= memberBhv.outsideSql().selectList(path, pmb, entityType);
// ## Assert ##
for (MemberWithMaxPurchasePrice member : memberList) {
final String memberName = member.getMemberName();
final Integer maxPurchasePrice = member.getMaxPurchasePrice();
log.debug(memberName + " - " + maxPurchasePrice);
assertTrue(memberName.startsWith("ス"));
}
}
public static class MemberWithMaxPurchasePrice {
protected Integer memberId;
protected String memberName;
public Integer getMemberId() {
return memberId;
}
public void setMemberId(Integer memberId) {
this.memberId = memberId;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
}
public static class MemberWithMaxPurchasePrice {
protected Integer memberId;
protected String memberName;
protected Integer maxPurchasePrice;
public Integer getMemberId() {
return memberId;
}
public void setMemberId(Integer memberId) {
this.memberId = memberId;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public Integer getMaxPurchasePrice() {
return maxPurchasePrice;
}
public void setMaxPurchasePrice(Integer maxPurchasePrice) {
this.maxPurchasePrice = maxPurchasePrice;
}
}
BehaviorのoutsideSql()メソッドに続いてselectList()というメソッドを呼び出しています。ここで,
引数は,
上記の例では実は会員Entityをそのまま引数として利用することも可能です。つまり,
しかし,
戻り値の型は,
しかし,
上記の例においても,