As I replied earlier in this thread....
"I also checked with the single point of truth - the database. For those
interested...
Mapping:
<select id="getRegisteredAction" resultClass="registeredAction">
SELECT REAC_ID as id
, REAC_NAME as name
, REAC_DESCRIPTION as description
, REAC_IND_ACTIVE as active
FROM CXF_REGISTERED_ACTIONS
WHERE REAC_ID = #value#
</select>
Mini tester:
public static void main(String[] args) throws SQLException {
SqlMapClient sqlMap = SqlMapConfig.getSqlMapInstance();
PreparedStatement stmt = sqlMap.getCurrentConnection().
prepareStatement("alter system set sql_trace=true");
stmt.execute();
sqlMap.queryForObject ("getRegisteredAction", new Long(1));
sqlMap.queryForObject ("getRegisteredAction", new Long(2));
}
Execute the above on a freshly started database instance.
Interpretation of Oracle trace file:
1st occurrence:
PARSING IN CURSOR #3 len=190 dep=0 uid=57 oct=3 lid=57 tim=2640378680
hv=2472912027 ad='69e65bc8'
SELECT REAC_ID as id , REAC_NAME as name ,
REAC_DESCRIPTION as description , REAC_IND_ACTIVE as active
FROM CXF_REGISTERED_ACTIONS WHERE REAC_ID = *:1* END OF STMT
PARSE #3:c=0,*e=353*,p=0,cr=0,cu=0,*mis=1*,r=0,dep=0,og=1,tim=2640378675
2nd occurrence:
PARSING IN CURSOR #4 len=190 dep=0 uid=57 oct=3 lid=57 tim=2640557676
hv=2472912027 ad='69e65bc8'
SELECT REAC_ID as id , REAC_NAME as name ,
REAC_DESCRIPTION as description , REAC_IND_ACTIVE as active
FROM CXF_REGISTERED_ACTIONS WHERE REAC_ID = :1 END OF STMT
PARSE #4:c=0,*e=59*,p=0,cr=0,cu=0,*mis=0*,r=0,dep=0,og=1,tim=2640557673
Notice that:
1. Bind variables are actually used *:1*
2. 1st occurence is an Oracle hard parse indicated by a library cache
mis *mis=1*
3. 2nd occurence is an Oracle soft parse indicated by a library cache
hit *mis=0*
4. Hard parses are (obviously) more expensive than soft, *353 vs. 59*
"
Clinton Begin wrote:
Ooops.....Sven, that is incorrect.
Whether you use #inline# parameters or explicit parameter markers (?),
iBATIS will always use prepared statements with parameter markers.
iBATIS NEVER uses hardcoded arguments unless you use string
substitution using the $ syntax.
Cheers,
Clinton
On 10/10/05, *Castillo, Jose Rodrigo (LanInfo)*
<[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
Hi Sven:
How can i use paramaters markets with ibatis?
Thank you very much for your good explication!!!
Regards,
Rodrigo
"Sven Boden" <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
wrote in message
news:<[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>...
Simple... the SQL code executed by the JDBC example and the iBATIS
version is not the same. The JDBC examples use parameter markers and
proper arguments, while the iBATIS version in the original mail uses
inline parameters, the #value# (which means that the SQL generated
will contain hardcoded parameters)... By the way iBATIS can also use
parameters markers.
Oracle performance suffers very badly when using hardcoded arguments.
I could make my own example but have a look e.g. at Tom Kyte's site
http://asktom.oracle.com and search for "hard parsing"... you will get
a complete explanation why hardcoding is bad.
Personally I've seen in Oracle examples of executing SQL in a loop
with different arguments where with proper parameters the code would
take 2 seconds, and with harcoded arguments the "same" SQL took 2
minutes.
So if the database is Oracle a more proper comparison would be to
hardcode the arguments in the JDBC example, or use parameter markers
in iBATIS.
Regards,
Sven
On Thu, 06 Oct 2005 23:45:41 +0200, you wrote:
>Hi Sven,
>
>Like to hear from you, how you came to that conclusion.
>
>-J
>
----------
------------------------------------------------------------------------
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.11.10/120 - Release Date: 10/5/2005
--
Cumquat Information Technology
De Dreef 19
3706 BR Zeist
T +31 (0)30 - 6940490
F +31 (0)10 - 6940499
http://www.cumquat.nl
[EMAIL PROTECTED]
M +31 6 51 169 556