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实现分页查询的四种使用方式