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” />
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
Spring3.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” />
使用 MapperScannerConfigurer 来扫描包 package (“com.mybatis3.mappers”)下的所有 映射器 Mapper 接口,并自动地注册
版本声明:原创文章,转载请注明出处