Конфигурация на основе XML + аннотаций для MyBatis

Возможно ли иметь конфигурацию на основе XML + Annotation для MyBatis в приложении.

Причина, по которой я спрашиваю об этом, заключается в том, что в своем приложении я использую подход, основанный на аннотациях. Но в одном из сценариев мне нужно использовать предложение IN, которое можно построить с помощью

<foreach></foreach>

на основе XML-конфигурации.

Однако, когда я запускаю свое приложение, оно, кажется, не распознает мои картографы на основе аннотаций и дает мне исключение Type interface is not known to the MapperRegistry

Поэтому я хотел бы знать, возможно ли иметь конфигурацию на основе XML + Annotation для MyBatis в приложении. Пожалуйста, предложите.


person Vivek    schedule 09.01.2012    source источник


Ответы (2)


Возможно иметь конфигурацию на основе XML + аннотаций.

Для конфигурации на основе xml:

Начните с файла контекста весны. В файле контекста добавьте следующие строки

<beans:bean id="dataSource"
              class="org.springframework.jdbc.datasource.DriverManagerDataSource"
              p:driverClassName="yourDriverClassName"
              p:url="yourUrl"
              p:username="yourUsername"
              p:password="yourPassword" />

<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <beans:property name="dataSource" ref="dataSource" />
    <beans:property name="configLocation" value="/WEB-INF/mybatis-config.xml" />
</beans:bean>
<!-- assuming you have a dao named UserDao -->
<beans:bean id="userDao" class="com.yourcomp.dao.Userdao">
    <beans:property name="sqlSessionFactory" ref="sqlSessionFactory" />
</beans:bean>

ваш 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>

  </settings>
  <typeAliases>

    <typeAlias alias="User" type ="com.yourcomp.domain.User" />

  </typeAliases>
  <mappers>

    <mapper resource="com/yourcomp/domain/UserMapper.xml"/>
    <mapper resource="com/yourcomp/domain/AnotherDomainObjectMapper.xml"/>
  </mappers>

</configuration>

и ваш userMapper.xml в src/com/yourcomp/domain/ может быть примерно таким

<?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="org.pbl.rms.RMSUserDao">-->

<mapper namespace="com.yourcomp.domain.User">

  <resultMap id="userMap" type="User">
  <id property="userId" column="USER_ID" javaType="int" jdbcType="NUMERIC"/>
  <result property="userName"  column="USER_NAME" javaType="String" jdbcType="VARCHAR"/>
  <result property="userFullName"  column="USER_FULL_NAME" javaType="String" jdbcType="VARCHAR"/>
  <result property="password"  column="PASSWORD" javaType="String" jdbcType="VARCHAR"/>
  <result property="passwordExpiryDate"  column="PASWRD_EXPIRY_DATE" javaType="java.util.Date" jdbcType="DATE"/>
  <result property="status" column="STATUS" javaType="_integer" jdbcType="DECIMAL"/>
  </resultMap>

  <select id="getUserById" parameterType="map" resultMap="userMap">
  select  * from user where USER_ID=#{userId}
  </select>

</mapper>

теперь на вашем уровне DAO у вас может быть следующий класс:

public class UserDAO{

    private SqlSessionFactory sqlSessionFactory;

    public UserDAO() {

    }

    public UserDAO(SqlSessionFactory sqlSessionFactory ) {
        this.sqlSessionFactory = sqlSessionFactory;

    }
    public String getUserById(Integer userId) {
        SqlSession session = sqlSessionFactory.openSession();
        //int success = -100;
        String name=null;
        try {
            name = (String)session.selectOne("com.yourcomp.domain.User.getUserById",userId);
        }catch(Exception e){

        }finally {
            session.close();
        }
        return name;
    }
}

Теперь для использования конфигурации на основе аннотаций добавьте следующее:

У вас может быть такой интерфейс:

public interface MyMapper {
    @Select(value="select something from some_table")
    public String getSomeValue(@Param("someParam") String someParam);

}

теперь добавьте в свой файл контекста следующее:

<beans:bean id="annotatedMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <beans:property name="mapperInterface" value="com.yourcomp.MyMapper" />
  <!-- remember the sqlsession factory defined earlier for xml based conf ? -->
  <beans:property name="sqlSessionFactory" ref="sqlSessionFactory" />
</beans:bean>

Надеюсь это поможет :)

person Moinul Hossain    schedule 31.01.2012

Приведенные ниже теги также можно использовать в подходе, основанном на аннотациях.
‹для каждого› ‹/для каждого›

В этом случае вам не потребуются два файла сопоставления.

person parvez    schedule 19.06.2014