Spring和MyBatis的四种结合方式

Posted 不去天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring和MyBatis的四种结合方式相关的知识,希望对你有一定的参考价值。

概述

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>

以上是关于Spring和MyBatis的四种结合方式的主要内容,如果未能解决你的问题,请参考以下文章

springboot结合Mybatis和mybatis-plus实现分页查询的四种使用方式

css和html的四种结合方式

实现spring事务的四种方式

爆破专栏丨Spring Security系列教程之Spring Security的四种权限控制方式

Mybatis多参传递的四种解决方案

Spring获取上下文的四种方式方式