ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chris Bowman <ch...@phoros.co.uk>
Subject Re: Dynamic Select problem
Date Wed, 05 Apr 2006 14:14:36 GMT
Larry,

that fixed it, thankyou.

Sometimes computers frustrate me more than I can possibly say!

Cheers,

Chris

Larry Meadors wrote:
> Try this:
>
>    <iterate property="list">
>    ,$list[]$
>    </iterate>
>
> Larry
>
>
> On 4/5/06, Chris Bowman <chris@phoros.co.uk> wrote:
>   
>> Hi All,
>>
>> I have a problem with a dynamic select, and having searched the archive
>> I have found no answer.
>>
>> The sutuation:
>>
>> I have a database where customers can add user defined fields to each
>> table, so any data access framework I use must be able to dynamically
>> create select statements to handle these unknown fields (the framework
>> must work across different customer databases with different user
>> defined fields).
>>
>> All user defined fields begin with 'U_', so I initially do a select to
>> get a List of these fields (the table is called Customer)
>>
>>     results = sqlMap.queryForList("mapper.getCustomerUserFields", null);
>>
>> This worls fine, and I have a List of user defined Customer fields. Next
>> stage is to get the actual dynamic select of the Customer table done. I
>> use a parameter class which contains the List and a Customer ID, defined
>> as follows:
>>
>>     <parameterMap id="custParamMap"
>> class="com.aoi.data.params.CustomerParam">
>>     <parameter property="list"/>
>>     <parameter property="id"/>
>>     </parameterMap>
>>
>> I then use the param class to search for specific customers (and their
>> dynamic field values):
>>
>>     <statement id="getPageFields2" parameterMap="custParamMap"
>> resultClass="java.util.HashMap">
>>     SELECT
>>     Customer.Serial_Num
>>     <iterate property="list">
>>     ,#list[]#
>>     </iterate>
>>     FROM
>>     Customer
>>     where Customer.id = #id#
>>     </statement>
>>
>> I turned debug on via Log4j, and got this output:
>>
>>
>> DEBUG 04-05 13:37:55 {pstm-100004} PreparedStatement:  SELECT
>> Customer.Serial_Num  ,?  ,?  FROM Customer where customer.id = ?
>> (Log4jImpl.java:22)
>> DEBUG 04-05 13:37:55 {pstm-100004} Parameters: [U_Destination, U_Resort,
>> 1]  (Log4jImpl.java:22)
>> DEBUG 04-05 13:37:55 {pstm-100004} Types: [java.lang.String,
>> java.lang.String, java.lang.Integer]  (Log4jImpl.java:22)
>> DEBUG 04-05 13:37:55 {rset-100005} ResultSet  (Log4jImpl.java:22)
>> DEBUG 04-05 13:37:55 {rset-100005} Header: [Serial_Num, expr2, expr3]
>> (Log4jImpl.java:22)
>> DEBUG 04-05 13:37:55 {rset-100005} Result: [1, U_Destination, U_Resort]
>> (Log4jImpl.java:22)
>>
>> As you can see, the dynamic select is simply treating the List values as
>> fixed values rather than column names, and returning them as is. A
>> toString on the result map gives:
>>
>>     {expr2=U_Destination, expr3=U_Resort, Serial_Num=1}
>>
>> Is there anything I am missing here? I seem to be doing this correctly,
>> but I am relatively new to iBatis.
>>
>> Regards,
>>
>> Chris Bowman
>>
>>     
>
>   

Mime
View raw message