Spring - MapperFactoryBean

1、注入映射器

官网介绍html

为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,MyBatis-Spring 提供了一个动态代理的实现:MapperFactoryBean。这个类 可让你直接注入数据映射器接口到你的 service 层 bean 中。spring

MapperFactoryBean 动态代理控制着开放和关闭 session,翻译任意的异常到 Spring 的 DataAccessException 异常中。此外,若是须要或参与到一个已经存在活动事务中,代理将 会开启一个新的 Spring 事务。 sql

2、MapperFactoryBean

将指定的映射器接口加入到spring中markdown

<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 建立的代理类实现了 UserMapper 接口,而且注入到应用程序中。 由于代理建立在运行时环境中(Runtime) ,那么指定的映射器必须是一个接口,而 不是一个具体的实现类。session

若是 UserMapper 有一个对应的 MyBatis 的 XML 映射器文件, 若是 XML 文件在类路径的 位置和映射器类相同时, 它会被 MapperFactoryBean 自动解析。 没有必要在 MyBatis 配置文 件 中 去 指 定 映 射 器 , 除 非 映 射 器 的 XML 文 件 在 不 同 的 类 路 径 下(参考前面的文章)。 mybatis

3、MapperScannerConfigurer

可使用一个 MapperScannerConfigurer , 它 将 会 查 找 类 路 径 下 的 映 射 器 (mapper)并 自 动 将 它 们 创 建 成 MapperFactoryBean。app

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

注意:spa

  • basePackage 属性是让你为映射器接口文件设置基本的包路径。你可使用分号或逗号做为分隔符设置多于一个的包路径。翻译

  • 不须要指定SqlSessionFactory , 由于 MapperScannerConfigurer 将会建立 MapperFactoryBean,以后自动装配。代理

  • 可是,若是你使用了一个以上的 DataSource ,那么自动装配可能会失效。可使用sqlSessionFactoryBeanName 属性来设置正确的 bean 名 称来使用。

特别注意:因为bean 的名称是必须的,而不是 bean 的引用,因 此,value 属性在这里替代一般的 ref

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />

被发现的映射器将会使用 Spring 对自动侦测组件,若是没有特别注解,它就会使用映射器的非大写的非彻底限定类 名。可是若是@Component 或 JSR-330 的@Named 注解,它会获取名称。

注意:这里不要使用 ref会致使jdbc.properties 文件先被读取,以至于在使用sqlSessionFactorybean时,jdbc.properties 文件不会被再次读取。

相关文章
相关标签/搜索