Mybatis-@MapperScan和mybatis:scan分析

MyBatis-Spring-1.2.0 新增了两种新的扫描映射器 Mapper 接口的方法:
使用<mybatis:scan/>元素
使用@MapperScan 注解(需要 Spring3.1+版本)


<mybatis:scan>

<mybatis:scan>元素将在特定的以逗号分隔的包名列表中搜索映射器 Mapper 接口。 使用这个新的 MyBatis-Spring 名空间你需要添加以下的 schema 声明:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd
">
<mybatis:scan base-package="com.mybatis.x.mappers" />
</beans>
<mybatis:scan> 元素提供了下列的属性来自定义扫描过程:
annotation : 扫描器将注册所有的在 base-package 包内并且匹配指定注解的映射器 Mapper 接口。
factory - ref : Spring 上 下 文 中 有 多 个 SqlSessionFactory 实 例 时 , 需 要 指 定 某 一 特 定 的
SqlSessionFactory 来创建映射器 Mapper 接口。正常情况下,只有应用程序中有一个以上的数据源
才会使用。
marker - interface : 扫描器将注册在 base-package 包中的并且继承了特定的接口类的映射器 Mapper

template - ref : Spring 上下文中有多个 SqlSessionTemplate 实例时,需要指定某一特定的
SqlSessionTemplate 来创建映射器 Mapper 接口。 正常情况下,只有应用程序中有一个以上的数据源

才会使用。

 name-generator:BeannameGenerator 类的完全限定类名,用来命名检测到的组件。



MapperScan
   Spring 3.x+版本支持使用@Configuration @Bean 注解来提供基于 Java 的配置。如果使用基于java的配置,可以使用@MapperScan 注解来扫描映射器 Mapper 接口。 @MapperScan <mybatis:scan/>工作方式
相同,并且也提供了对应的自定义选项。

@Configuration
@MapperScan(
"com.mybatis.x.mappers")
public class AppConfig
{
@Bean
public DataSource dataSource()
{
return new PooledDataSource("com.mysql.jdbc.Driver",
"jdbc:mysql://localhost:3306/test", "root", "root");
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception
{
SqlSessionFactoryBeansessionFactory =
new
SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
return sessionFactory.getObject();
}
}

@MapperScan 注解有以下属性供自定义扫描过程使用 :
annotationClass : 扫描器将注册所有的在 base-package 包内并且匹配指定注解的映射器 Mapper 接口。
markerInterface : 扫描器将注册在 base-package 包中的并且继承了特定的接口类的映射器 Mapper 接口
sqlSessionFactoryRef : Spring 上 下 文 中 有 一 个以 上 的 SqlSesssionFactory 时 , 用 来 指 定 特 定
SqlSessionFactory
sqlSessionTemplateRef : Spring 上下文中有一个以上的 sqlSessionTemplate 时,用来指定特定
sqlSessionTemplate
-nameGenerator :BeanNameGenerator 类用来命名在 Spring 容器内检测到的组件。
basePackageClasses :basePackages() 的类型安全的替代品。 包内的每一个类都会被扫描。
basePackages : 扫描器扫描的基包,扫描器会扫描内部的 Mapper 接口。 注意包内的至少有一个方法声明的才会被

注册。 具体类将会被忽略。


当然还可以在 applicationContext.xml 配置如下

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name
="basePackage" value="com.mybatis3.mappers" />
</bean>
使用 MapperScannerConfigurer 来扫描包 package ("com.mybatis3.mappers")下的所有 映射器 Mapper 接口,并自动地注册





版本声明:原创文章,转载请注明出处












猜你喜欢

转载自blog.csdn.net/jacabe/article/details/80023616