That looks reasonable. I'll give it a run through. Keep playing with it to ensure that it does indeed satisfy your case.
Clinton On Sun, Dec 20, 2009 at 6:32 PM, Joe Gooch <mrwiz...@k12system.com> wrote: > I think option 3 is probably the best. > > Two takes that both work. > http://users.k12system.com/mrwizard/software/ibatis-3beta7-mapfix1.patch > http://users.k12system.com/mrwizard/software/ibatis-3beta7-mapfix2.patch > > > Thoughts? > Joe > > > > -----Original Message----- > > From: Joe Gooch [mailto:mrwiz...@k12system.com] > > Sent: Sunday, December 20, 2009 1:07 AM > > To: 'user-java@ibatis.apache.org' > > Subject: Using Map as a parameter object > > > > Hi! I've been kicking around iBatis3 for a bit, and I'm > > running into an inconsistency I'd like to resolve. > > > > For most of my DB Handling items I use > > CaseInsensitiveHashMaps. It's less precise, but since our > > backend DB is case insensitive, it makes sense to follow > > through w/ the Java. > > > > If I pass in a CaseInsensitiveHashMap, iBatis doesn't see it > > as such. From looking at the source, it appears > > DynamicContext, when it finds any type of Map, merely does a > > putAll into its HashMap. (which is case-sensitive) Thus, my > > parameter object is really never consulted; instead, the > > values were taken, which means any decorators on that Map are > > silently discarded. > > > > However, if I create a simple class, say MapHolder, with a > > getMap() method, which returns my CaseInsensitiveHashMap, I > > have no problems. My guess is because it resolves map to > > getMap() via bean methods, and returns my original Map > > object. So the get() method properly finds all mixed case keys. > > > > I'm not sure how widespread this type of usage is... But it > > seems like an oversight to me. > > > > As I see it, there are four ways I can fix this... > > 1) Use my MapHolder everywhere. However, this seems rather > > unnecessary... I would think a get() call on the map is more > > efficient than a bean resolution and then a get()... > > Probably not significantly so. But it makes my code look > > inelegant and I have to use map.param everywhere to reference > > things, which would make it harder to transparently supply a > > bean later. > > 2) Replace the empty ContextMap (bindings) with the actual > > passed in Map. This provides other issues, for instance, > > casting without knowing the original Generics.... Plus, I > > don't think iBatis should modify my original map, which it > > would do almost immediately. (By injecting _parameter) > > 3) Extend the ContextMap definition such that a map can be > > provided as a delegate... Much the same way Defaults work in > > the java.util.Properties object. Any call to ContextMap.get > > would first consult itself. If it finds a value, return it. > > If it doesn't, then consult the "child" map (if non-null), > > and return any value found. I'd also have to wrap > > containsKey and some other items. > > 4) Provide some way to provide a Map decorator to > > DynamicContext... Or redefine the Context with one that uses > > a CaseInsensitiveHashMap natively... > > > > > > So... Certainly some options. Opinions on which way to go? > > > > Thanks. > > Joe > > > > --------------------------------------------------------------------- > > 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 > >