You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Jerry Jalenak <je...@gmail.com> on 2005/05/20 18:45:33 UTC

iBatis 2.0.9 Dynamic Statement Problem?

All,

I'm using 2.0.9 w/ a dynamic statement (passing in a Map), but it doesn't 
appear to be building the PreparedStatement completely.

<code>

public void getUserInfo(UserInfo ui)
throws SQLException
{
Map m = new HashMap();
m.put("lastName", ui.getLastName() + "%");
m.put("firstName", ui.getFirstName() + "%");
m.put("dob", ui.getDob());
m.put("patientId", ui.getPatientId());

SqlMapClient sqlMap = getSqlMapClient();
try
{
ui = (UserInfo) sqlMap.queryForObject("getUserInformation", m, ui);
}
catch(SQLException sqle)
{}
finally
{
m = null;
}
}

</code>

<sqlmap>

<select id="getUserInformation" resultMap="UserInformation">
SELECT ext_patient_id, insured_first_name, insured_last_name, member_ssn, 
carrier_num, pcs_group_id, 
insured_dob, eff_begin_date, eff_end_date, app_addr1, app_addr2, city, 
state_code, zip_code, 
order_received_dte, order_sent_dte, order_status, relation_code 
FROM labcard_eligibility
WHERE relation_code = '00' and carrier_num ^= 'UNIVERSAL'
<dynamic>
<isNotEmpty prepend="AND" property="lastName">
insured_last_name LIKE #lastName#
</isNotEmpty>
<isNotEmpty prepend="AND" property="firstName">
insured_first_name LIKE #firstName# 
</isNotEmpty>
<isNotEmpty prepend="AND" property="dob">
insured_dob = #dob# 
</isNotEmpty>
<isNotEmpty prepend="AND" property="patientID">
(ext_patient_id = $patientId$ or member_ssn = $patientId$)
</isNotEmpty>
</dynamic>

</select>
</sqlmap>

<log4j output>

DEBUG 05/20/2005:11:33:14 - Created connection 5872987.
DEBUG 05/20/2005:11:33:14 - {pstm-100001} PreparedStatement: SELECT 
ext_patient_id, insured_first_name, insured_last_name, member_ssn, 
carrier_num, pcs_group_id, insured_dob, eff_begin_date, eff_end_date, 
app_addr1, app_addr2, city, state_code, zip_code, order_received_dte, 
order_sent_dte, order_status, relation_code FROM labcard_eligibility WHERE 
relation_code = '00' and carrier_num ^= 'UNIVERSAL' AND insured_last_name 
LIKE ? AND insured_first_name LIKE ? 
DEBUG 05/20/2005:11:33:14 - {pstm-100001} Parameters: [REYNOLDS%, RICHARD%]
DEBUG 05/20/2005:11:33:14 - {pstm-100001} Types: [java.lang.String, 
java.lang.String]
DEBUG 05/20/2005:11:33:15 - Returned connection 5872987 to pool.

</log4j output>

>From the DEBUG trace, it looks like it's only substituting the lastName and 
firstName attributes. I've stopped the code and inspected the Map, and the 
other data elements (dob and patientID) are in the Map. Is this a bug in 
2.0.9? or have I screwed something up? 

Thanks!

Jerry