今の現場のJavaのシステム開発でSQLを実行して、データ取得をする処理のメモ。
Javaファイル
javaからSQLを実行する。引数にSQLのWHERE句で使用するための値を格納したMapをセットする。
実際のSQLはPowerSql.xmlに書いてあるのでそのファイルの特定のidを指定する。
下記はPowerSql.xmlのidがselectContractPlanInfoのSQLを指定している。
public CompanyBean selectContractPlanInfo(String companyCd,String contractPlanCd) {
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("companyCd",companyCd);
paramMap.put("contractPlanCd",contractPlanCd);
paramMap.put("openDate",OpenDate)
return (CompanyBean) this.getSqlMapClientTemplate().queryForObject("PowerSql.selectContractPlanInfo",paramMap);
}
SQLの処理は以下。
<resultMap id="ContractPlanBean" class="jp.cp.softbank.wep.bean.CompanyBean">
<result column="CLASS_KIND" property="kind">
<result column="CLASS_CD" property="code">
<result column="CLASS_NAME" property="name">
</resultMap>
<select id="selectContractPlanInfo" parameterClass="java.util.Map" resultMap="ContractPlanBean">
SELECT
"-" AS CLASS_KIND
PLN.ELECT_POWER_PLAN_CD AS CLASS_CD
PLN.ELECT_POWER_PLAN_NM AS CLASS_NAME
FROM
AA11.TB_MST_PLAN_CTRL
WHERE
CTRL_ELECT_POWER_PLAN_CD = PLN.ELECT_POWER_PLAN_CD
AND
CTRL.CONTRACTOR_TYPE_CD='01'
AND
CTRL.PROVIDER_CD=#powerCompanyCd#
AND
CTRL.ELECT_POWER_PLAN_CD=#contractPlanCd#
AND
#openDate.time#
</select>
解説
結果をマッピング
1〜5行目のresultMapはMyBatisによるマッピングの定義。SQLの実行結果をJavaオブジェクトにマッピングする。
例をあげるとAA11.TB_MST_PLAN_CTRLテーブルのCLASS_KINDカラムの値はCompanyBeanオブジェクトのkindプロパティにセットいる。
<!-- class=Beanを指定 -->
<resultMap id="ContractPlanBean" class="jp.cp.softbank.wep.bean.CompanyBean">
<!--column=テーブルのカラム名 property=Beanにセットされているプロパティ名 -->
<result column="CLASS_KIND" property="kind">
<result column="CLASS_CD" property="code">
<result column="CLASS_NAME" property="name">
</resultMap>
selectタグ
parameterClass="java.util.Map"と指定された場合、クエリやステートメントにはjava.util.Mapクラスのオブジェクトが渡される。Company.javaで引数にしていたparamMapが渡されるということ。
resultMap="ContractPlanBean"は上記のresultMapの定義を指定しているので、結果をマッピングすることができる。
<select id="selectContractPlanInfo" parameterClass="java.util.Map" resultMap="ContractPlanBean">
SQL
#powerCompanyCd#や#contractPlanCd#、#openDate#は、paramMapのキーのことを指している。実行後にキーに該当する値がセットされる。上記でparameterClass="java.util.Map"にしたからこそparamMapを使用することができる。
SELECT
"-" AS CLASS_KIND
PLN.ELECT_POWER_PLAN_CD AS CLASS_CD
PLN.ELECT_POWER_PLAN_NM AS CLASS_NAME
FROM
AA11.TB_MST_PLAN_CTRL
WHERE
CTRL_ELECT_POWER_PLAN_CD = PLN.ELECT_POWER_PLAN_CD
AND
CTRL.CONTRACTOR_TYPE_CD='01'
AND
CTRL.PROVIDER_CD=#powerCompanyCd#
AND
CTRL.ELECT_POWER_PLAN_CD=#contractPlanCd#
AND
#openDate.time#
終わり
SLQを実行する処理でした。他のシステム開発ではどのような処理になっているのか気になりました