Yeah, I think that would be pretty simple. The only thing I'd have to ensure is that the XML is loaded first, which may be harder than it sounds.
File a Jira Feature Request and we'll see what we can do. Cheers, Clinton On Tue, Apr 20, 2010 at 9:38 AM, Travis <travi...@travnet.org> wrote: > Hi there, > > I recently have been upgrading my iBatis 2.x projects to now use iBatis 3. > I really appreciate the work done to create this new Mapper interface. And > related I have started to play with having some of the simpler queries live > as @Select annotations on the mapper interface method now instead of in the > XML. > > I noticed for the @Select annotation, it is possible to have the results of > the statement mapped to a java bean if I use the @Results annotation. > > Would it be possible to create a new annotation (or does one exist already > and I just have not found it yet), where I can specify that @Select results > should be a <resultMap> that exists in the mapper XML file ? > > > For example, > > Consider a "country" table, > > [code] > CREATE TABLE COUNTRY > ( > ID bigint PRIMARY KEY NOT NULL, > CODE varchar(2) NOT NULL, > ISO_CODE varchar(3) NOT NULL, > NAME varchar(2147483647), > COUNTRY_CODE varchar(10), > ACTIVE boolean DEFAULT TRUE NOT NULL > ); > [/code] > > And the java Bean, > > [code] > public class Country { > Long id; > String code; // 2 digit ISO country code > String isoCode; // 3 digit ISO country code > String name; // string name > String countryCode; // the telephone dialing prefix (e.g. +1) > boolean active = true; > > // and all the get() set() methods for these bean properties > } > [/code] > > > And then the mapper interface, > > [code] > public interface CountryDAO { > > /** > * Selects all country entries. > * Though it appears when we use the annotations, we need to specify the > results every time ? > */ > @Select( value = { "select * from country where active = true" }) > @Results(value = { > @Result(property="id"), > @Result(property="code"), > @Result(property="isoCode", column="iso_code"), > @Result(property="name", column="name"), > @Result(property="countryCode", column="country_code"), > @Result(property="active", column="active") > }) > List<Country> getAllActive(); > > // TODO: all these methods would also be select queries, where I would > want the same results map as above > Country getById(Long id); > Country getByCode(String code); > Country getByIsoCode(String isoCode); > } > [/code] > > > Where, instead of the @Results annotation, which would need to be > duplicated with its nested @Result annotations on every select method that I > want to return the same mapping, what I would wish to have would be > something like a > > @ResultMap(value="myMapperID") > > annotation, where the myMapperID would be the ID of a <resultMap> I have > declared in the mapper's xml file that will be included by the > SqlMapConfig.xml (which I have anyway to bind to this mapper interface, and > also because I have some more complex queries declared in the xml mapper > file too). > > Where in this example, I already have a > > [code] > <mapper namespace="CountryDAO"> > > <resultMap type="Country" id="countryResult"> > <result property="id" column="id"/> > <result property="code" column="code"/> > <result property="isoCode" column="iso_code"/> > <result property="name" column="name"/> > <result property="countryCode" column="country_code"/> > <result property="active" column="active"/> > </resultMap> > [/code] > > > So this wishful @ResultMap annotation would then make the mapper interface > look like: > > [code] > public interface CountryDAO { > > @Select( value = { "select * from country where active = true" }) > @ResultMap(value = "countryResult") > List<Country> getAllActive(); > > > // and now other things that want to select into this map can do so, > re-using the single map declaration > // that is referenced in the xml. > > @Select( value = { "select * from country where id = #{id} }) > @ResultMap(value = "countryResult") > Country getById(Long id); > > > @Select( value = { "select * from country where code = #{code} }) > @ResultMap(value = "countryResult") > Country getByCode(String code); > > @Select( value = { "select * from country where isoCode = #{isoCode} }) > @ResultMap(value = "countryResult") > Country getByIsoCode(String isoCode); > } > [/code] > > > I think having something like this @ResultMap annotation would be a good > thing to have, what do you think? > > -- > Travis > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@ibatis.apache.org > For additional commands, e-mail: dev-h...@ibatis.apache.org > >