Method is annotated with @InsertProvider, my implementation method takes a Map<String, Object> and can see the array passed in keyed with "array" (I also explicitly set its name with @Param to be sure it was consitent in my sql provider and where it creates the prepared statement values)

Generated sql in java:
INSERT INTO test (id, field) VALUES (#{array[0].id}, #{array[0].field}), (#{array[1].id}, #{array[1].field}), (#{array[2].id}, #{array[2].field})

However, when the sql is run with a array of 3 objects, which in order have id's 1,2,3 and field values "field1", "field2", "field3", in this case it only populated the values for the last item in the array, and into the second position of the parameter values..

==>  Executing: INSERT INTO test (id, field) VALUES (?, ?), (?, ?), (?, ?)
==> Parameters: null, null, 3, field3(String), null, null

This isn't the behavior one would expect, no?

On 5/21/2010 11:10 AM, Jeff Butler wrote:
Yes - that works.  iBATIS is using OGNL to interpret the parameters,
so any valid OGNL expression works.

Jeff Butler


On Fri, May 21, 2010 at 10:04 AM, Alex Sherwin
<alex.sher...@acadiasoft.com>  wrote:
On 5/21/2010 10:23 AM, Alex Sherwin wrote:
I just want to make sure, but there is there simply no way to pass
arguments to the sql provider method defined in the annotations such as
@InsertProvider?

It would be very beneficial to be able to do so in terms of building
dynamic sql, such as an insert statements for a dynamic number of rows

---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org
For additional commands, e-mail: user-java-h...@ibatis.apache.org



After stepping through the code I've answered my own question, I don't know
how I missed that before; and I also see it underlined specifically in the
documentation.. missed that as well somehow.

My next question is, which the documentation doesn't touch upon, is there a
notation for directly accessing members of an array or list?  Ultimately, my
question is, in a java sql provider, can I pass in a List/Array of objects
and generate (pseudo) sql such as this:

insert into tbl (id, field) values (#{ilst[0].id}, #{list[0].field},
#{list[1].id}, #{list[2].id}, .. )

---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org
For additional commands, e-mail: user-java-h...@ibatis.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org
For additional commands, e-mail: user-java-h...@ibatis.apache.org





---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org
For additional commands, e-mail: user-java-h...@ibatis.apache.org

Reply via email to