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