Spring - MapperFactoryBean
Spring - MapperFactoryBean
爱吃柠檬的橘子 发表于1年前
Spring - MapperFactoryBean
  • 发表于 1年前
  • 阅读 15
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

一、注入映射器

官网介绍

为了代替手工使用 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 文件不会被再次读取。

  • 点赞
  • 收藏
  • 分享
粉丝 6
博文 178
码字总数 84138