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> |
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> |
版本声明:原创文章,转载请注明出处