In my own code I do something similar to what DBUtils does -- borrowing a page from the Grails domain object design. I put the mapping between the fields and the table columns in a Map within the bean. This allows me to explicitly state the mapping between the two -- or rather explicitly state the exceptions to the basic mapping rule. This does the trick for me.
Mark On Tue, Feb 24, 2009 at 1:49 PM, Christian Hvid <christian.h...@gmail.com>wrote: > > DBUtils code look like this: > > QueryRunner run = new QueryRunner(dataSource); > > ResultSetHandler h = new BeanHandler(Person.class); > > Person p = (Person) run.query("SELECT * FROM Person WHERE name=?", > "John Doe", h); > > (Which implictly calls the public no arguments constructor of People > and some setters thereafter.) > > I avoided that approach because it hardwires the attribute names of > the relation returned by the query with the properties of the Java > class. > > So if something is called given_name in a database table there would > have to be a setGivenName (or maybe even setGiven_name) in the Java > class. > > Also you would have to have public setters for all properties - > eventhough it only makes sense setting them at construction (i.e. > "id"). > > On Feb 24, 4:27 pm, Mark Fortner <phidia...@gmail.com> wrote: > > Hi Christian, > > You might want to have a look at Apache Commons DBUtils which uses > similar > > syntax to convert resultsets into beans using a the BeanProcessor class. > > > > Hope this helps, > > > > Mark > > > > On Sun, Feb 22, 2009 at 6:21 AM, Christian Hvid < > christian.h...@gmail.com>wrote: > > > > > > > > > > > > > Hi Java people. > > > > > I have been toying with simplier ways of doing embedded SQL in Java. > > > > > And would like your comments on this one? > > > > >http://code.google.com/p/chalkmine/ > > > > > It allows you to write code like this: > > > > > openConnection(); > > > try { > > > int count = queryScalar(Integer.class, "select count(*) from > > > people"); > > > System.out.println("There are "+count+" people in the bin."); > > > } finally { > > > closeConnection(); > > > } > > > > > or > > > > > openConnection(); > > > try { > > > List<Person> people = queryList(Person.class, "select name, > > > time_in_the_bin from people"); > > > for (Person p : people) > > > System.out.println(p.getName()+" has been "+p.getTimeInTheBin() > > > +" hours in the bin."); > > > } finally { > > > closeConnection(); > > > } > > > > > (Provided that Person has a constructor matching the types of name, > > > time_in_the_bin. Probably Person(String, int).) > > > > > Where the methods openConnection, queryScalar, queryList, > > > closeConnection are statically imported. > > > > > openConnection() figures out the name of the calling class, looks up a > > > configuration, opens a connection and puts in a ThreadLocal container. > > > > > queryScalar(Class, String, ...) performs a query with a single row > > > result that is "cast" to the given class. > > > > > queryList(Class, String, ...) performs a query and returns the result > > > as a list of the given class. > > > > > I would like to turn it into a full-fledged open source project. > > > > > But since it is incredibly hard for a new open source project to gain > > > traction I would like to figure out whether it is interesting enough > > > first. > > > > > -- Christian > > > > -- > > Mark Fortner > > > > blog:http://feeds.feedburner.com/jroller/ideafactory > > > -- Mark Fortner blog: http://feeds.feedburner.com/jroller/ideafactory --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "The Java Posse" group. To post to this group, send email to javaposse@googlegroups.com To unsubscribe from this group, send email to javaposse+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/javaposse?hl=en -~----------~----~----~----~------~----~------~--~---