2010-11-24 39 views
12

J'aime la notation XML pour spécifier les paramètres globaux tels que les chaînes de connexion. J'aime aussi les annotations de Mapper. Lorsque j'essaie de combiner les deux, j'obtiens this exception.mybatis: Utilisation des interfaces de mappeur avec la configuration XML pour les paramètres globaux

Existe-t-il un moyen de combiner les deux? Je voudrais utiliser un fichier XML pour les configurations globales, mais mybatis prend en compte les interfaces Mapper. Le problème est que SqlSessionFactoryBuilder(). Build() prend soit un lecteur (que je veux utiliser pour passer la config XML), soit un objet Configuration (que je vois a la méthode addMappers() qui peut m'aider) - mais je ne comprends pas comment combiner les deux.

+0

Je voudrais vraiment savoir ceci! L'ajout à la main des interfaces du mappeur n'est pas une solution appropriée. Comment pouvons-nous configurer les mappeurs en XML et en utilisant MapperInterfaces ensemble sans les ajouter à la main? – Chris

Répondre

9

factory.getConfiguration().addMapper(...);

0

J'ai eu le même problème et était parce que l'espace de nom dans mybatis fichier cartographe et l'ensemble de l'interface ont été mappeur ne correspondent pas.

5

Lorsque vous créez l'interface de mappeur avec les méthodes abstraites ayant la signature de méthode exacte en tant que sql dans le fichier XML.

Par exemple. C'était l'espace de noms pour le fichier dao.xml qui contenait la requête réelle.

<mapper namespace=" com.mybatis.dao.EntityMapperInterface"> 
    <select id="selectEmployeeWithId" parameterType="Long" 
     resultType="com.mybatis.domain.Employee"> 
     select id,name from employee where 1=1 
     <if test="_parameter != null"> 
      AND id=#{id} 
     </if> 
     order by id 
    </select> 

Il sera mis en correspondance dans le com.mybatis.dao.EntityMapperInterface d'interface

public interface EntityMapperInterface { 
    public List<Employee> selectEmployeeWithId(Long id); 

fichier mybatis-config

<mappers> 
    <mapper resource="com/mybatis/mappers/EntityMapper.xml" /> 
</mappers> 

Comment appeler u depuis le Classe d'action/Servlet? Lorsque vous avez initialisé le SqlSession,

EntityMapperInterface emi = session.getMapper(EntityMapperInterface.class); 
List eList = emi.selectEmployeeWithId(1);