2010-11-24 16 views
12

Me gusta la notación XML para especificar parámetros globales como las cadenas de conexión. También me gustan las anotaciones de Mapper. Cuando intento combinar los dos, obtengo this exception.mybatis: Uso de las interfaces del correlacionador con la configuración XML para los parámetros globales

¿Hay alguna manera de combinar los dos? Me gustaría utilizar un archivo XML para las configuraciones globales, pero mybatis tiene en cuenta las interfaces de Mapper.

El problema es que SqlSessionFactoryBuilder(). Build() toma un Reader (que quiero usar para pasar la configuración XML), o un objeto Configuration (que veo que tiene el método addMappers() que me puede ayudar) - pero no entiendo cómo combinar los dos.

+0

¡Me gustaría saberlo! Agregar las interfaces del asignador a mano no es una solución adecuada. ¿Cómo podemos configurar mapeadores en XML y usar MapperInterfaces juntos sin agregarlos a mano? – Chris

Respuesta

9

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

0

que tenían el mismo problema y fue debido a que el espacio de nombres en el archivo mapeador mybatis y el paquete de la interfaz asignador no fueron coincidentes.

5

Cuando crea la interfaz del correlacionador con los métodos abstractos que tienen la firma exacta del método como el sql en el xml.

Por ej. Este era el espacio de nombres para el dao.xml que contenía la consulta real.

<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> 

Se asigna en el com.mybatis.dao.EntityMapperInterface interfaz

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

archivo mybatis-config

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

U ¿Cómo llamaremos a partir de la Clase de acción/servlet? Cuando has inicializado el SqlSession,

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