Way to use sql in mapper interface, without having to create a corresponding xml mapping file?

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Way to use sql in mapper interface, without having to create a corresponding xml mapping file?

Rick R-2
Larry showed me his cool no xml config setup which I'd love to implement at some point.

For this current project using ibatis3 it's too late to refactor a real lot at this stage and we're using your typical sqlMapConfig file.  Overall we still prefer to code all of our sql in xml files, but I just recently decided to create some sql using the annotation-based approach in an interface mapper file.

The problem (?) is that even though all the sql is in this mapper interface, I seem to still have to declare a dummy corresponding mapping xml file just to declare the interface namespace (otherwise ibatis at runtime bitches about not being able to find the mapping.)  I looked over the ibatis3 pdf and under the annotation approach section for using Mappers it doesn't really mention that you need the corresponding mapping.xml file, so I'm probably just missing something stupid?

Shouldn't there be a way in the SqlMapConfig to declare "Use this interface mapper" ? Basically I was thinking in the mapper section of the config instead of having to use:

<mappers>
   <mapper resource="mapper-files/metadb/DataReleaseMapper.xml"/>

You could also include:

<mappers>
   <mapper class="com.foobar.mapper.DataReleaseMapper"/>

As it is now, I'm having to declare that silly DataReleaseMapper.xml which only ends up wrapping my interface Mapper.


<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper
        PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
        "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
   
     <mapper namespace="com.foo.dataselector.media.service.mapper.DataReleaseMapper">
    
</mapper>

My assumption is that I'm missing something obvious:)
Reply | Threaded
Open this post in threaded view
|

Re: Way to use sql in mapper interface, without having to create a corresponding xml mapping file?

Jeff Butler-2
It took me a while to figure it out also!

Create your SqlSessionFactory as normal, then add the interfaces manually:

     sqlSessionFactory.getConfiguration().addMapper(SomeMapperInterface.class);

Jeff Butler


On Wed, May 12, 2010 at 4:16 PM, Rick R <[hidden email]> wrote:

> Larry showed me his cool no xml config setup which I'd love to implement at
> some point.
>
> For this current project using ibatis3 it's too late to refactor a real lot
> at this stage and we're using your typical sqlMapConfig file.  Overall we
> still prefer to code all of our sql in xml files, but I just recently
> decided to create some sql using the annotation-based approach in an
> interface mapper file.
>
> The problem (?) is that even though all the sql is in this mapper interface,
> I seem to still have to declare a dummy corresponding mapping xml file just
> to declare the interface namespace (otherwise ibatis at runtime bitches
> about not being able to find the mapping.)  I looked over the ibatis3 pdf
> and under the annotation approach section for using Mappers it doesn't
> really mention that you need the corresponding mapping.xml file, so I'm
> probably just missing something stupid?
>
> Shouldn't there be a way in the SqlMapConfig to declare "Use this interface
> mapper" ? Basically I was thinking in the mapper section of the config
> instead of having to use:
>
> <mappers>
>    <mapper resource="mapper-files/metadb/DataReleaseMapper.xml"/>
>
> You could also include:
>
> <mappers>
>    <mapper class="com.foobar.mapper.DataReleaseMapper"/>
>
> As it is now, I'm having to declare that silly DataReleaseMapper.xml which
> only ends up wrapping my interface Mapper.
>
>
> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper
>         PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
>         "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
>
>      <mapper
> namespace="com.foo.dataselector.media.service.mapper.DataReleaseMapper">
>
> </mapper>
>
> My assumption is that I'm missing something obvious:)
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Way to use sql in mapper interface, without having to create a corresponding xml mapping file?

Larry Meadors
He wants to represent that in the xml config.

Larry


On Thu, May 13, 2010 at 2:35 PM, Jeff Butler <[hidden email]> wrote:

> It took me a while to figure it out also!
>
> Create your SqlSessionFactory as normal, then add the interfaces manually:
>
>     sqlSessionFactory.getConfiguration().addMapper(SomeMapperInterface.class);
>
> Jeff Butler
>
>
> On Wed, May 12, 2010 at 4:16 PM, Rick R <[hidden email]> wrote:
>> Larry showed me his cool no xml config setup which I'd love to implement at
>> some point.
>>
>> For this current project using ibatis3 it's too late to refactor a real lot
>> at this stage and we're using your typical sqlMapConfig file.  Overall we
>> still prefer to code all of our sql in xml files, but I just recently
>> decided to create some sql using the annotation-based approach in an
>> interface mapper file.
>>
>> The problem (?) is that even though all the sql is in this mapper interface,
>> I seem to still have to declare a dummy corresponding mapping xml file just
>> to declare the interface namespace (otherwise ibatis at runtime bitches
>> about not being able to find the mapping.)  I looked over the ibatis3 pdf
>> and under the annotation approach section for using Mappers it doesn't
>> really mention that you need the corresponding mapping.xml file, so I'm
>> probably just missing something stupid?
>>
>> Shouldn't there be a way in the SqlMapConfig to declare "Use this interface
>> mapper" ? Basically I was thinking in the mapper section of the config
>> instead of having to use:
>>
>> <mappers>
>>    <mapper resource="mapper-files/metadb/DataReleaseMapper.xml"/>
>>
>> You could also include:
>>
>> <mappers>
>>    <mapper class="com.foobar.mapper.DataReleaseMapper"/>
>>
>> As it is now, I'm having to declare that silly DataReleaseMapper.xml which
>> only ends up wrapping my interface Mapper.
>>
>>
>> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper
>>         PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
>>         "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
>>
>>      <mapper
>> namespace="com.foo.dataselector.media.service.mapper.DataReleaseMapper">
>>
>> </mapper>
>>
>> My assumption is that I'm missing something obvious:)
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Way to use sql in mapper interface, without having to create a corresponding xml mapping file?

Rick R-2


On Thu, May 13, 2010 at 4:50 PM, Larry Meadors <[hidden email]> wrote:
He wants to represent that in the xml config.
 

Right. It seems odd that you can manually add the Mapper through Java (as Jeff has shown), but not through the xml config.
 



Reply | Threaded
Open this post in threaded view
|

Re: Way to use sql in mapper interface, without having to create a corresponding xml mapping file?

Clinton Begin
That would be a really simple change. 

What I've been really getting used to though is configuring the datasource in XML, and then using Java for most everything else. 

For example, I have this in a class called IbatisConfig:

      final String resource = "com/myapp/data/IbatisConfig.xml";
      final Reader reader = Resources.getResourceAsReader(resource);
      final SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
      final Configuration configuration = sessionFactory.getConfiguration();
      TypeAliasRegistry typeAliasRegistry = configuration.getTypeAliasRegistry();
      typeAliasRegistry.registerAlias(User.class);
      typeAliasRegistry.registerAlias(Project.class);
      typeAliasRegistry.registerAlias(Category.class);
      typeAliasRegistry.registerAlias(Type.class);
      configuration.addMapper(UserMapper.class);
      configuration.addMapper(ProjectMapper.class);
      configuration.addMapper(SessionMapper.class);
      return sessionFactory;

Clinton

On Thu, May 13, 2010 at 5:10 PM, Rick R <[hidden email]> wrote:


On Thu, May 13, 2010 at 4:50 PM, Larry Meadors <[hidden email]> wrote:
He wants to represent that in the xml config.
 

Right. It seems odd that you can manually add the Mapper through Java (as Jeff has shown), but not through the xml config.
 




Reply | Threaded
Open this post in threaded view
|

Re: Way to use sql in mapper interface, without having to create a corresponding xml mapping file?

Rick R-2
Ok, cool maybe ill just change to this.

(By the way, I'm searching the archives for this, and it's sort of off-topic but since you mentioned you create your datasource in XML - I'm curious how do you declare the pool implementation that you want to use? I know ibatis comes with a default one (not sure which one) but I was going to use the latest commons-dbcp pool.)

On Thu, May 13, 2010 at 7:25 PM, Clinton Begin <[hidden email]> wrote:
That would be a really simple change. 

What I've been really getting used to though is configuring the datasource in XML, and then using Java for most everything else. 

For example, I have this in a class called IbatisConfig:

      final String resource = "com/myapp/data/IbatisConfig.xml";
      final Reader reader = Resources.getResourceAsReader(resource);
      final SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
      final Configuration configuration = sessionFactory.getConfiguration();
      TypeAliasRegistry typeAliasRegistry = configuration.getTypeAliasRegistry();
      typeAliasRegistry.registerAlias(User.class);
      typeAliasRegistry.registerAlias(Project.class);
      typeAliasRegistry.registerAlias(Category.class);
      typeAliasRegistry.registerAlias(Type.class);
      configuration.addMapper(UserMapper.class);
      configuration.addMapper(ProjectMapper.class);
      configuration.addMapper(SessionMapper.class);
      return sessionFactory;

Clinton


On Thu, May 13, 2010 at 5:10 PM, Rick R <[hidden email]> wrote:


On Thu, May 13, 2010 at 4:50 PM, Larry Meadors <[hidden email]> wrote:
He wants to represent that in the xml config.
 

Right. It seems odd that you can manually add the Mapper through Java (as Jeff has shown), but not through the xml config.
 







--
Rick R
Reply | Threaded
Open this post in threaded view
|

Re: Way to use sql in mapper interface, without having to create a corresponding xml mapping file?

Rick R-2


On Thu, May 13, 2010 at 9:21 PM, Rick R <[hidden email]> wrote:
 
(By the way, I'm searching the archives for this, and it's sort of off-topic but since you mentioned you create your datasource in XML - I'm curious how do you declare the pool implementation that you want to use? I know ibatis comes with a default one (not sure which one) but I was going to use the latest commons-dbcp pool.)
 

Nevermind.. Screw it. I'm doing the whole thing now manually with Java (including the BasicDataSource setup) and no xml (just some db properties files). I