SqlSessionTemplate详解——Mybatis+Spring Boot

SqlSessionTemplate详解——Mybatis+Spring Boot

  • SqlSessionTemplate简介
  • 主要类变量
  • 代码解析
  • SqlSessionTemplate实现方式

SqlSessionTemplate简介

通俗地讲,SqlSessionTemplate是Mybatis—Spring的核心,是用来代替默认Mybatis实现的DefaultSqlSessionFactory,也可以说是DefaultSqlSessionFactory的优化版,主要负责管理Mybatis的SqlSession,调用Mybatis的sql方法,SqlSessionTemplate是线程安全的,通过TransactionSynchronizationManager中的ThreadLocal保存线程对应的SqlSession,可以被多个Dao共享使用。

主要类变量

字段 类型 描述

字段 类型 描述
sqlSessionFactory SqlSessionFactory SqlSession工厂
executorType ExecutorType Executor的类型:SIMPLE, REUSE, BATCH
sqlSessionProxy SqlSession SqlSession代理对象,注册了SqlSessionInterceptor反射处理器,实际上的方法调用都是通过SqlSessionInterceptor反射实现的。
exceptionTranslator PersistenceExceptionTranslator Spring提供的接口,用于处理持久化框架的异常

代码解析

  • SqlSessionTemplate实现了SqlSession接口和DisposableBean接口,SqlSession这个不用多说,是用来实现对数据库的CURD操作的,相当于JDBC的Connection对象。个人认为跟现在市面上流行的,mybatis-plus是差不多的,只是其中实现方法的名称不同,其他的都是相同的。

  • DisposableBean接口了,这个接口就有点意思了,首先声明一点,SqlSessionTemplate是Mybatis为了接入Spring提供的Bean,既然是Bean那肯定会执行初始化操作,Spring为初始化Bean提供了两种方式,一种是实现InitializingBean接口重写里面的afterPropertiesSet方法,第二种是配置文件中通过init-method指定afterPropertiesSet方法,两种方法都能完成Bean的初始化操作,那DisposableBean接口又是干嘛的呢,看下图,该接口只有一个方法,根据方法的名字,应该能猜出一些了,是在Bean完成初始化之后,对象销毁的时候用的,跟初始化Bean对应的,销毁对象也有两种方法,第一就是调用DisposableBean中的destroy方法,第二种就是在配置文件中的destroy-method,这个配置跟init-method相对应,在调用销毁的时候先调用DisposableBean的destroy方法,后执行destroy-method指定的方法。

SqlSessionTemplate实现方式

引入依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>

Mybatis里面有提供SqlSessionTemplate,由于SpringBoot都是用的注解的方式注入,所以没有Spring-Mybatis.xml也就不需要配置,用Autowired直接自动注入即可。
SqlSessionTemplate详解——Mybatis+Spring Boot_第1张图片
SqlSessionTemplate支持的方法,数据库的CURD四大操作都有,可以直接使用。已经做到了见名知意。如图:
SqlSessionTemplate详解——Mybatis+Spring Boot_第2张图片
这里是代码,obj是传的参数,实体或者map类型的吧,看个人习惯吧。str是Mapper文件
namespace的值和id。其中的用法见下图。

/**
	 * 
	 *查找对象
	 * @author  XWJ 
	 * @return UserInfo 
	 * @class DaoImpl
	 * @model findTheObject
	 * @param str
	 * @param ob
	 * @return
	 */
	public UserInfo findTheObject(String str,Object ob){
		return sqlSessionTemplate.selectOne(str, ob);
	}
	
	

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;

import com.xb.dao.DaoImpl;
import com.xb.util.EndData;

/**
 * @author XWJ
 *2019年10月10日
 */
@Repository
public class TestService2 {

	@Resource(name="daoImpl")
	private DaoImpl dao;
	
	
	public UserInfo getUserInfo(String id) throws Exception {
		//这里是mapper文件的名字和实现此类的方法名字
		return (UserInfo)dao.findTheObject("TestMapper.getUserInfo", id);
		}
}

你可能感兴趣的:(java)