Spring和MyBatis的四种结合方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BuquTianya/article/details/78943056

概述

MyBatis-Spring提供了多种和Spring的结合方式,当然我们平时可能只用到其中的一种,也就是MapperScannerConfigurer这种。在一些比较老的项目里边还可能还在用其他的几种之一。

尤其是当Spring的AbstractRoutingDataSource还没有被熟悉的时候,有些项目做分库使用了客户端的分库逻辑,通过某个id的取模值来选择不同的SqlSession。这些情况下,也会使用其他几种结合方式。

接下来对4种结合方式做一个大致的说明,这里不进行整体代码的罗列,即忽略Datasource和SqlSessionFactory的配置部分,仅展示关键部分代码。

以下四种方式,都需要定义一个IBlogManager的接口类:

package com.dangdang.dao;

import com.dangdang.model.Blog;

public interface IBlogManager {
    Blog selectBlog(long id);
}

前两种方式需要自定义BlogManager的实现类,后两种MyBatis-Spring会自动给我们生成IBlogManager的动态代理类,也就不需要我们自己定义BlogManager实现类了。

使用SqlSessionTemplate

<!-- application-context.xml -->

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
public class BlogManager implements IBlogManager {

  @AutoWired
  private SqlSession sqlSession;

  public void setSqlSession(SqlSession sqlSession) {
    this.sqlSession = sqlSession;
  }

  public Blog getBlog(String id) {
    return (Blog) sqlSession.selectOne("com.dangdang.mapper.BlogMapper.selectBlog", id);
  }
}

使用SqlSessionDaoSupport

<!-- application-context.xml -->

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
public class BlogManager extends SqlSessionDaoSupport implements IBlogManager {
  public Blog getBlog(String id) {
    return (Blog) getSqlSession().selectOne("com.dangdang.mapper.BlogMapper.selectBlog", id);
  }
}

使用MapperFactoryBean

<!-- application-context.xml -->
<bean id="blogManager" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="com.dangdang.mapper.BlogMapper" />
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

这种形式每一个Mapper都要有一个MapperFactoryBean的定义。

使用MapperScannerConfigurer

<!-- application-context.xml -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.dangdang.mapper" />
  <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

猜你喜欢

转载自blog.csdn.net/BuquTianya/article/details/78943056
今日推荐