2012-01-09 134 views
1

是否可以在應用程序中同時使用基於XML +註釋的MyBatis配置。基於XML + MyBatis的基於註釋的配置

我問這個問題的原因是因爲在我的應用程序中我使用基於Annotation的方法。 但在場景中的一個,我需要使用IN子句,這可以使用

<foreach></foreach> 

基於XML的配置來構建。

然而,當我開始我的應用程序,它似乎並沒有認識到基於我註解映射器,給我一個Type interface is not known to the MapperRegistry例外

因此,我想知道是否有可能有兩個XML +基於註解MyBatis在應用程序中的配置。 請建議。

回答

6

其可能同時擁有XML +基於註解配置

對於XML基於配置:

開始file.In您的上下文文件的Spring上下文中添加以下行

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

和SRC/COM/yourcomp /域的userMapper.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="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> 

希望這有助於:)

0

下面的標籤也可以在基於註釋的方式使用。
<的foreach > < /的foreach >

在這種情況下,你不會需要兩個映射文件。