XML : Mybatis mapper with interface instead of xml file

I'm working with mybatis this is my configuration and it is working:

mybatis-config.xml:

  <?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">    <configuration>      <settings>          <setting name="cacheEnabled" value="true" />          <setting name="lazyLoadingEnabled" value="true" />          <setting name="multipleResultSetsEnabled" value="true" />          <setting name="useColumnLabel" value="true" />          <setting name="useGeneratedKeys" value="false" />          <setting name="autoMappingBehavior" value="PARTIAL" />          <setting name="defaultExecutorType" value="SIMPLE" />          <setting name="defaultStatementTimeout" value="25" />          <setting name="safeRowBoundsEnabled" value="false" />          <setting name="mapUnderscoreToCamelCase" value="false" />          <setting name="localCacheScope" value="SESSION" />          <setting name="jdbcTypeForNull" value="OTHER" />          <setting name="lazyLoadTriggerMethods"     value="equals,clone,hashCode,toString" />      </settings>        <typeAliases>          <typeAlias type="com.beitech.cagb.secure.api.model.UserDataResult"              alias="UserData"></typeAlias>      </typeAliases>        <mappers>          <mapper resource="com/payulatam/ppp4/secure/api/interfaces/user-    mapper.xml" />          <!-- <mapper     class="com.beitech.cagb.secure.api.interfaces.UserMapper" />  -->      </mappers>    </configuration>    

user-mapper.xml:

  <?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">    <mapper namespace="com.beitech.cagb.secure.api.interfaces.IUserDao">        <select id="getUserData" resultType="UserData">          select          usuario_web_id as usuario_web_id,          tipo_usuario_web as tipo_usuario_web,          email as email,          nombres as nombres,          apellidos as apellidos          from          pps.usuario_web u          where          u.usuario_web_id=#{userId}          and u.email=#{mail}      </select>    </mapper>    

IUserDao:

  package com.beitech.cagb.secure.api.interfaces;    import org.apache.ibatis.annotations.Param;  import com.beitech.cagb.secure.api.model.UserDataResult;    public interface IUserDao {        public UserDataResult getUserData(          @Param("mail") final String mail,          @Param("userId") final Integer userId);    }    

But if I switch between:

  <mappers>      <!-- <mapper resource="com/payulatam/ppp4/secure/api/interfaces/user-    mapper.xml" />  -->      <mapper class="com.beitech.cagb.secure.api.interfaces.UserMapper" />    

to use this class instead the xml file UserMapper:

  package com.beitech.cagb.secure.api.interfaces;    import org.apache.ibatis.annotations.Select;  import com.beitech.cagb.secure.api.model.UserDataResult;  import org.apache.ibatis.annotations.Results;  import org.apache.ibatis.annotations.Result;    public interface UserMapper {        @Select("select usuario_web_id as usuario_web_id, tipo_usuario_web as tipo_usuario_web, email as email, nombres as nombres, apellidos as apellidos from pps.usuario_web u where u.usuario_web_id=#{userId} and u.email=#{mail}")      @Results(value = {          @Result(property="usuario_web_id",javaType=Integer.class,column="usuario_web_id"),      @Result(property="tipo_usuario_web",javaType=String.class,column="tipo_usuario_web"),      @Result(property="email",javaType=String.class,column="email"),      @Result(property="nombres",javaType=String.class,column="nombres"),      @Result(property="apellidos",javaType=String.class,column="apellidos")  })  UserDataResult getUserData(String mail, Integer userId);    

}

I got this error:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.beitech.cagb.secure.api.interfaces.IUserDao.getUserData

I have this test class:

  package com.beitech.cagb.secure.api;    import org.junit.Assert;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;    import com.beitech.cagb.secure.api.interfaces.IUserDao;  import com.beitech.cagb.secure.api.model.UserDataResult;    @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration(locations="/META-INF/spring/pu.xml")  public class UserDaoTest {        @Autowired      private IUserDao userDao;        @Test      public void testUserDAO(){            Assert.assertNotNull(userDao);          UserDataResult userDataResult = userDao.getUserData("ana.sandoval@pagosonline.com", 500101);            Assert.assertNotNull(userDataResult);          System.out.println("UserData: " + userDataResult.getUsuario_web_id() + " "              + userDataResult.getEmail() + " "              + userDataResult.getTipo_usuario_web() + " "              + userDataResult.getNombres() + " "              + userDataResult.getApellidos());      }    }    

I think maybe is because in the xml file I define a namespace like this and not in the interface:

<mapper namespace="com.beitech.cagb.secure.api.interfaces.IUserDao">

No comments:

Post a Comment