Thanks Casey,

I have been thinking as you, in configuring queries from XML. I will give it 
a look and I will post feedback when done.

Regards,

Adolfo.

>From: Casey Forbes <[EMAIL PROTECTED]>
>Reply-To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
>To: [EMAIL PROTECTED]
>Subject: re: re: DAO open source?
>Date: Tue, 14 May 2002 20:41:47 -0400
>
>Hi Adolfo,
>
>I wrote something which has been working well
>for me - it makes extensive use of the Jakarta
>Digester utility and some classes similar to
>BeanUtils and PropertyUtils
>
>Works something like this:
>
>   Can pass "simple" objects like Integer, String, Float
>   (the kinds that you can use in JDBC setObject calls) or beans.
>
>   Can get beans, simple objects, or arrays of each back as results.
>
>
>Java like this:
>
>public class UselessAction extends SubclassedAction {
>
>     // SubclassedAction extends Action and build a DaoFactory on
>     // startup, passing it in to the perform method of my application
>     // actions
>
>     performAction(ActionMapping mapping, blah blah, ActionForm form,
>         DaoFactory df) {
>
>         Customer[] customers;
>         DataAccessor dao = df.getDataAccessor("invoice");
>
>         // just a wrapper around a hashmap that takes care of primitive
>         // wrapping and java.util.Date -> java.sql.Date, etc
>         ParameterSet params = new ParameterSet();
>         params.addParameter("userId", 0)
>         dao.execute("retrieveCustomers", params);
>         customers = (Customer)dao.getResults(new Customer[0]);
>
>         Invoice invoice = new Invoice();
>         PropertyUtils.copyProperties(invoice, form);
>         ParameterSet invoiceParams = new ParameterSet();
>         params.addParameter("userId", 0)
>         invoiceParams.addParameter("invoice", invoice);
>         dao.execute("saveInvoice", params);
>     }
>}
>
>
>The DaoFactory is built on startup by Digester
>The XML looks like this:
>
><daomap>
>   <connections>
>     <connection name="sam" alias="primary">
>   </connections>
>   <beans>
>     <bean name="com.kensfoods.example.Invoice" alias="invoice"/>
>     <bean name="com.kensfoods.example.Customer" alias="customer"/>
>   </beans>
>   <datasources>
>     <datasource>
>       <datasource-name>invoice</datasource-name>
>       <connection-alias>primary</connection-alias>
>       <method>
>         <method-name>retrieveCustomers</method-name>
>       <statement>
>         <call>{call sbrGetCustomers(?)}</call>
>         <input>
>             <parameter name="userId" position="1"
>                 type="java.lang.Integer"/>
>         </input>
>         <output/>
>         </statement>
>       <result bean="customer">
>         <field property="customerId"/>
>           <field property="customerName"/>
>           <field property="address1"/>
>           <field property="address2"/>
>         <field property="address3"/>
>           <field property="city"/>
>           <!-- etc.... -->
>       </result>
>       </method>
>       <method>
>       <method>
>         <method-name>saveInvoice</method-name>
>       <statement>
>         <call>{? = call sbrPutInvoice(?,?,?,?,?,?,?,...</call>
>         <input>
>             <parameter name="userId" position="2"
>                 type="java.lang.Integer"/>
>             <parameter name="invoiceId" bean="invoice" position="3"/>
>           <parameter name="invoiceNumber" bean="invoice"
>                 position="4"/>
>             <!-- etc.... -->
>           <output>
>             <parameter name="return" position="1"
>                 type="java.lang.Integer"/>
>             <parameter name="invoiceId" position="3"
>                 type="java.lang.Integer"/>
>           </output>
>         </statement>
>         <post-call>
>             <set source="output" from="invoiceId" to="invoice"
>                  to-property="invoiceId"/>
>         </post-call>
>       <result/>
>       </method>
>     </datasource>
>   </datasources>
></daomap>
>
>
>
>It works great for me - I hope that this gives you some ideas,
>
>Casey
>
>
>
>
> > Subject: DAO open source? From: "Adolfo Miguelez"
> > <[EMAIL PROTECTED]> Date: Tue, 14 May 2002 18:09:59 +0000 To:
> > [EMAIL PROTECTED]
> >
> > Hi All,
> >
> > probably a little out of Struts scope but, not a problem for many of
> > you, since it plugs in struts. I need to code an DAO class that, via
> > JDBC, accesses a database. Database is Oracle 8i. We intend to manage
> >  any kind of database data.
>
> > My employer suggested my that class could have a principal method
> > execute(...) signed like that:
> >
> > public static HashMap execute(String query, String datasource, String
> > DBuser, String DBpassword, ArrayList parameters);
> >
> > The class accesses PL/SQL stored procedures by means of
> > CallableStatements, which actually hold the business logic.
> >
> > * Returned hashmap contains return values indexed by return parameter
> > name, including arrayList converted form resulsets and
> > * ArrayList parameters holds next info about each parameter:
> > - IN/OUT/INOUT
> > - type
> > - value
>
> > in order that method can be able to work out the actual
> > CallableStatement.
>
> > That is the scenario. However, I am not sure about this design, and I
> > have some questions so, I would appreciate opinions.
> >
> > - Firstly, passing parameter types I think is quite messy for the
> > programmer. Furthermore, method can inspect in runtime database column
> > types and cast, or match itself, input parameter types for database
> > types. I would free this (pointless?) load to programmer that use this
> > class.
> >
> > - Maynbe using dynabeans rather than hashmaps in the return from the
> > method,
> >
> > - is good idea to make execute() static?
> >
> > - Does any of you know a open source DAO, or example to look at?
> >
> > Regards,
> >
> > Adolfo.
>
>
>
>--
>To unsubscribe, e-mail:   
><mailto:[EMAIL PROTECTED]>
>For additional commands, e-mail: 
><mailto:[EMAIL PROTECTED]>
>


_________________________________________________________________
MSN Photos is the easiest way to share and print your photos: 
http://photos.msn.com/support/worldwide.aspx


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to