当前位置: 首页 > 面试题库 >

基于XML + Annotation的MyBatis配置

裘禄
2023-03-14
问题内容

是否可以在应用程序中同时具有MyBatis的基于XML +注释的配置。

我之所以这样问,是因为在我的应用程序中,我使用的是基于注释的方法。但是在一种情况下,我需要使用IN子句,可以使用

<foreach></foreach>

基于XML的配置。

但是,当我启动应用程序时,它似乎无法识别基于注释的映射器,并给了我一个Type interface is not known to the MapperRegistry例外。

因此,我想知道是否可以在应用程序中同时具有MyBatis的基于XML + Annotation的配置。请提出建议。


问题答案:

可能同时具有基于XML + Annotation的配置

对于基于 xml 的配置:

从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 / domain /中的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>

希望这可以帮助 :)



 类似资料:
  • 本文向大家介绍基于MyBatis XML配置方法(全面了解),包括了基于MyBatis XML配置方法(全面了解)的使用技巧和注意事项,需要的朋友参考一下 MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。 文档的顶层结构如下: configuration 配置 properties 属性 settings 设置 typeA

  • 从Spring 2.5开始,可以使用annotations配置依赖注入。 因此,不是使用XML来描述bean连接,而是可以通过在相关的类,方法或字段声明上使用注释将bean配置移动到组件类本身。 在注入XML之前执行注释注入。 因此,对于通过两种方法连接的属性,后一种配置将覆盖前者。 默认情况下,Spring容器中未打开注释接线。 因此,在我们使用基于注释的布线之前,我们需要在Spring配置文件

  • 本文向大家介绍基于Java代码配置MyBatis Generator,包括了基于Java代码配置MyBatis Generator的使用技巧和注意事项,需要的朋友参考一下 使用MyBatis Generator生成器时,有时候没办法使用xml形式的配置文件,比如将Maven项目设置成pom打包方式(<packaging>pom</packaging>)!由于Maven的工作机制对于打包方式为pom

  • 17.4 基于 XML 架构的配置 可以使用来自 OXM 命名空间的 XML 标签是对编组器的配置变得更简洁。要使用这些标签,请在 XML 文件开头引用恰当的 XML 架构。以下是一个引用 oxm 的示例,请注意粗体字部分: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/sch

  • 问题内容: 在最近我从事的一些大型项目中,选择其中一种(XML或注释)似乎变得越来越重要。随着项目的发展,一致性对于可维护性非常重要。 我的问题是:与基于注释的配置相比,基于XML的配置有哪些优势?与基于XML的配置相比,基于注释的配置有哪些优势? 问题答案: 注释有其用途,但它们不是杀死XML配置的灵丹妙药。我建议将两者混合! 例如,如果使用Spring,则将XML用于应用程序的依赖注入部分是完

  • 问题内容: 我尝试不使用任何xml。 像这样一个:转换为@Bean 问题在这里。 尝试将“ com.cloudlb.domain.User”转换为Class []无效。 错误:投放问题。 先感谢您。 问题答案: