ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Blackburn, Gary (HHS/RHRC)" <Gary.Blackb...@hhs.gov>
Subject RE: Problem Converting Inline Parameters to Parameter Map
Date Wed, 31 May 2006 11:54:28 GMT
Thanks. I was under the (mistaken) impression that since the inline
parameter method was dynamically converting the string that was passed
into a method call that the parameterMap technique would do the same
thing. 
 
I played around with it and changing the caller (as you suggested)
worked just fine. An alternative (and, I think, cleaner) solution is to
simply change the parameterMap to receive a base class String, like so:
 
<parameterMap id="getemployeeMastersParam" class="java.lang.String">
  <parameter property="org" />
</parameterMap> 
 
Thanks for the tip on the caching method. The docs at
http://ibatisnet.sourceforge.net/DevGuide.html#d0e160
<http://ibatisnet.sourceforge.net/DevGuide.html#d0e160>  says:
 
"Many "agile" developers would start with something like Example 3 and
add features like caching later. If you changed the Data Map from
Example 3 to Example 4, you would not have to touch your application
source code at all. You can start simple and add complexity only when it
is needed."
 
Which I (again, mistakenly) interpreted that "caching" went with
"paramterMap" and not the inline method. Of course, a closer reading of
the docs down at Example 38 shows caching being used inline. :-)
 
Thanks again for your help!
 
--
Gary Blackburn

________________________________

From: Jeff Butler [mailto:jeffgbutler@gmail.com] 
Sent: Tuesday, May 30, 2006 1:06 PM
To: user-java@ibatis.apache.org
Subject: Re: Problem Converting Inline Parameters to Parameter Map


I suspect that the problem is in the code that calls this statement -
you need to do this:
 
employeeMaster em = new employeeMaster();
em.setOrg("someorg");
sqlMap.queryForList("getEmployeeMasters", em);
 
Your calling code is probably still passing in a String for #org# for
the previous version of the sql map like this:
sqlMap.queryForList("getEmployeeMasters", "someorg");
 
Two other comments:
 
1. By convention, Java classes whould start with upper case letters
(EmployeeMaster rather than employeeMaster)
2. I don't understand what you think the the link is between parameter
maps and caching.  We use caching a lot and never use a parameter map.
I think you only need to use parameter maps with stored procedures.
  
Jeff Butler
 
On 5/30/06, Blackburn, Gary (HHS/RHRC) <Gary.Blackburn@hhs.gov> wrote: 

	Hi all. I'm having trouble converting some (working) inline
parameters to the equivalent parameter map.
	 
	This works just fine:
	 
	
	<select id="getemployeeMasters"
resultClass="org.model.employeeMaster">
	  SELECT substr(administrative_code, 1, 3) as org 
	  FROM administrative_code a, employeeMaster e
	  WHERE rtrim(a.administrative_code) = rtrim(e.org
<http://e.org/> ) 
	  AND a.administrative_code like #org#
	  GROUP BY substr(administrative_code, 1, 3)
	 </select>
	 
	This does not: 
	 
	<parameterMap id="getemployeeMastersParam"
class="org.model.employeeMaster">
	  <parameter property="org" />
	</parameterMap> 
	 
	<select id="getemployeeMasters"
parameterMap="getemployeeMastersParam">
	  SELECT substr(administrative_code, 1, 3) as org 
	  FROM administrative_code a, employeeMaster e
	  WHERE rtrim(a.administrative_code) = rtrim(e.org
<http://e.org/> ) 
	  AND a.administrative_code like ?
	  GROUP BY substr(administrative_code, 1, 3)
	 </select>
	 
	I get the following error:
	 
	WARN - CommonsLoggingOutput.warn(44) | Erroring:
id[510_1149004528570]
message[org.springframework.jdbc.UncategorizedSQLException:
(SqlMapClient operation): encountered SQLException [  
	--- The error occurred in org/dao/ibatis/employeeMasterSQL.xml.

	--- The error occurred while preparing the mapped statement for
execution.  
	--- Check the getemployeeMasters.  
	--- Cause: java.sql.SQLException : Invalid parameter object
type.  Expected 'org.model.employeeMaster' but found
'java.lang.String'.]; nested exception is
com.ibatis.common.jdbc.exception.NestedSQLException:   
	--- The error occurred in org/dao/ibatis/employeeMasterSQL.xml.

	--- The error occurred while preparing the mapped statement for
execution.  
	--- Check the getemployeeMasters.  
	--- Cause: java.sql.SQLException: Invalid parameter object type.
Expected 'org.model.employeeMaster ' but found 'java.lang.String'.
	 
	 
	From what I can tell these two versions should be functionally
equivalent but obviously they are not. (I need to convert to a parameter
map so that I can turn on caching.) 
	 
	Any help would be appreciated! :-)
	 
	--
	
	Gary Blackburn



Mime
View raw message