mybatis-spring注册Mapper

1. XML Config单个配置:

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

这其中要注意的是MapperFactoryBean继承SqlSessionDaoSupport,SqlSessionDaoSupport 是一个抽象的支持类, 用来提供 SqlSession.

2. java Config单个配置

@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
   SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
   sqlSessionFactory.setDataSource(dataSource());
   return (SqlSessionFactory) sqlSessionFactory.getObject();
}

@Bean
public UserMapper userMapper() throws Exception {
   SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sqlSessionFactory());
   return sessionTemplate.getMapper(UserMapper.class);
}

3. 全局扫描配置:

(1)<mybatis:scan />元素:base-package属性指定扫描包位置,annotation通过指定接口需标注的注解进行筛选,maker-interface通过指定接口的父接口进行筛选。

(2) @MapperScan注解:用法同<mybatis:scan />元素。

(3)MapperScannerConfigurer:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="..." />
    <property name="sqlSessionFactoryBeanName" value="mybatisSqlSessionFactory" />
</bean>

      扫描注册Mapper要注意的是在mybatis-spring中,base-package属性如果没有指定至具体mapper interface所在包的话,annotation和marker-interface属性最好要设置其一,因为如果两者都没有指定且spring中base-package与mybatis中base-package有重叠的话,将创建重复创建bean报错如下:org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [xxx] is defined: expected single matching bean but found 2: xxxImpl,Ixxx

 

 

原文地址:https://www.cnblogs.com/qingwufeiyang/p/8478630.html