Ibatis sebenernya bukan framework JPA yang saya sukai tetapi ada salah satu project dikantor menggunakan Ibatis, butuh seharian sebenernya untuk saya menyelesaikan pembuatan Iterasi di Ibatis tapi mudah-mudahan solusi ini bermanfaat bagi orang lain.
Intinya sih saya membuat sebuah model bantu / dummy model yang tidak ada hubungannya dengan database, Saya membuat 2 attribute array didalamnya yaitu PlanCode dan Prefix yang nanti akan saya buat dinamis querynya didalam Ibatis dengan menggunakan SQL IN CLAUSE
package com.avrist.repoprint.model;
public class BankExt {
private String[] planCode;
private String[] prefix;
public String[] getPlanCode() {
return planCode;
}
public void setPlanCode(String[] planCode) {
this.planCode = planCode;
}
public String[] getPrefix() {
return prefix;
}
public void setPrefix(String[] prefix) {
this.prefix = prefix;
}
}
Sudah membuat object modelnya, lalu buka settingan Ibatis.xml untuk dinamis SQLnya. Masukkan parameterClass=”BankExt” dimana ini adalah Type Alias dari Object BankExt. Setelah itu perhatikan Kata Kunci Iterate disini berfungsi untuk mengiterasi data array didalam property PlanCode dan Prefix.
<typeAlias alias="BankExt" type="com.avrist.repoprint.model.BankExt"/>
<select id="getFundCodeByPlanCode" resultMap="Fund" parameterClass="BankExt">
SELECT DISTINCT a.COMPANYCODE, a.FUNDCODE, a.FUNDDESCRIPTION FROM FUNDMASTER a, PLANFUNDDESC b, PLANDESC c, COVERAGE D, COVERAGEFUNDALLOC E
WHERE c.FUNDCONTROLDESCID=b.FUNDCONTROLDESCID
AND (b.FUNDCODE=a.FUNDCODE AND E.FUNDCODE=A.FUNDCODE )
AND (
<dynamic prepend=" C.COVERAGECODE IN ">
<iterate property="planCode" open="(" close=")" conjunction=", ">
'$planCode[]$'
</iterate>
</dynamic>
AND C.COVERAGECODE=D.COVERAGECODE) AND D.COVERAGEPHASECODE='01'
AND (a.COMPANYCODE=c.COMPANYCODE AND E.COMPANYCODE = D.COMPANYCODE AND C.COMPANYCODE = D.COMPANYCODE)
AND (
<dynamic prepend=" LEFT(D.POLICYNUMBER,4) IN ">
<iterate property="prefix" open="(" close=")" conjunction=", ">
'$prefix[]$'
</iterate>
</dynamic>
AND E.POLICYNUMBER = D.POLICYNUMBER)
</select>
contoh diatas akan menghasilkan dinamis query seperti COVERAGECODE IN (‘AAAX’,'AAAB’) AND LEFT(POLICYNUMBER,4) IN (’3011′,’3022′).