Spring - MapperFactoryBean

一、注入映射器

官网介绍

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

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

二、MapperFactoryBean

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

<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) ,那么指定的映射器必须是一个接口,而 不是一个具体的实现类。

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

三、MapperScannerConfigurer

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

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

注意:

  • 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 文件不会被再次读取。

转载于:https://my.oschina.net/lemos/blog/790114

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值