SqlSessionTemplate详解——Mybatis+Spring Boot整合

SqlSessionTemplate详解——Mybatis+Spring Boot整合Mybatis+SpringBoot整合——SqlSessionTemplate简介通俗地讲,SqlSessionTemplate是Mybatis—Spring的核心,是用来代替默认Mybatis实现的DefaultSqlSessionFactory,也可以说是DefaultSqlSessionFactory的优化版,主要负责管理Mybatis的SqlSession,调用Mybatis的sq…

大家好,又见面了,我是你们的朋友全栈君。

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对象。
    直接输入1次#,并按下space后,将生成1级标题。输入2次#,并按下space后,将生成2级标题。以此类推,我们支持6级标题。有助于使用语法后生成一个完美的目录。

  • 另一个就是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实现方式

  • 一般SpringBoot项目在创建的时候都可以选择Mybatis的依赖,如果没有下面代码可直接复制。
<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支持的方法,数据库的CURD四大操作都有,可以直接使用。
    在这里插入图片描述
  • 下面是代码,字符串str的值是Mapper文件namespace的值和id,obj则是传入的参数,用的Object比较方便。
/** * *查找对象 * @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);
	}
	
	
  • 再下面则是Service调用
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 { 
   
		return (UserInfo)dao.findTheObject("TestMapper.getUserInfo", id);
		}
}

OK,到这里SqlSessionTemplate就解析完成 了,最后看都看了,码字不易,留个赞 再走吧!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138477.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大整数乘法python3实现

    大整数乘法python3实现由于python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,但是思想是一样的。利用的规律是:第一个数的第i位和第二个数大第j位相乘,一定累加到结果的第i+j位上,这里是从0位置开始算的。代码如下:importsysdeflist2str(li): whileli[0]==0: delli[0] res=” foriinli: res+

    2022年6月2日
    32
  • mybatis interceptor原理_mybatis拦截器获取表名

    mybatis interceptor原理_mybatis拦截器获取表名看了很多博客文章和,mybatis的拦截器概念还是不能很好理解,可能是因为自己基础不好或者理解方式和他人不同吧,所以决定自己花时间好好捋捋,然后把理解后的总结记录下来,供他人参考,也许你们的理解和我也不同,但是不妨花几分钟时间看看,说不定能帮助你文章主要是讲解org.apache.ibatis.plugin包下的Interceptor类和org.apache.ibatis….

    2022年9月9日
    0
  • Ubuntu20.04安装输入法_ubuntu20中文输入法

    Ubuntu20.04安装输入法_ubuntu20中文输入法这篇文章主要介绍了ubuntu20.04中文输入法安装步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧本文安装谷歌输入法。其实之前一直用的是搜狗输入法,因为20.04取消qt4了没装成,就去尝试别的输入法了。发现谷歌输入法用起来极舒服,比sougouforlinux好用多了。记得谷歌的中文输入法主要是北京分部在做,对googlecn的好感度飙升!!!安装fcitx-googlepinyinCtrl+Alt+T..

    2022年9月26日
    1
  • java类加载器是什么_类加载器有几种

    java类加载器是什么_类加载器有几种类加载器是有了解吗?解析:底层原理的考察,其中涉及到类加载器的概念,功能以及一些底层的实现。答:顾名思义,类加载器(classloader)用来加载Java类到Java虚拟机中。一般来说,Java虚拟机使用Java类的方式如下:Java源程序(.java文件)在经过Java编译器编译之后就被转换成Java字节代码(.class文件)。类加载器负责读取Java…

    2022年8月11日
    4
  • Linux下安装RabbitMQ

    Linux下安装RabbitMQ一、RabbitMQ介绍RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。AMQP,即AdvancedMessageQ…

    2022年10月22日
    0
  • pycharm导入pandas模块_pycharm如何导入python的库

    pycharm导入pandas模块_pycharm如何导入python的库pycharm上安装库(以pandas为例)网上有些反应安装pandas库时会出现问题,提示好像是pip的原因。这时候大概是自己的pip版本太久啦。所以最好先在cmd更新一下pip好了。在cmd输入命令:python-mpipinstall-Upip出现成功信息:Requirementalreadyup-to-date即可。之后打开pycharm1、点击右上角file/se

    2022年8月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号