MyBatis-Spring-SqlSession_getsqlsessiontemplate springboot-程序员宅基地

技术标签: Spring、MyBatis  

使用 SqlSession

在 MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession。一旦你获得一个 session 之后,你可以使用它来执行映射语句,提交或回滚连接,最后,当不再需要它的时 候, 你可以关闭 session。 使用 MyBatis-Spring 之后, 你不再需要直接使用 SqlSessionFactory 了,因为你的 bean 可以通过一个线程安全的 SqlSession 来注入,基于 Spring 的事务配置 来自动提交,回滚,关闭 session。

注意通常不必直接使用 SqlSession。 在大多数情况下 MapperFactoryBean, 将会在 bean 中注入所需要的映射器。下一章节中的 MapperFactoryBean(6.1 节)会解释这个细节。

SqlSessionTemplate

SqlSessionTemplate 是 MyBatis-Spring 的核心。 这个类负责管理 MyBatis 的 SqlSession, 调用 MyBatis 的 SQL 方法, 翻译异常。 SqlSessionTemplate 是线程安全的, 可以被多个 DAO 所共享使用。

当调用 SQL 方法时, 包含从映射器 getMapper()方法返回的方法, SqlSessionTemplate 将会保证使用的 SqlSession 是和当前 Spring 的事务相关的。此外,它管理 session 的生命 周期,包含必要的关闭,提交或回滚操作。

SqlSessionTemplate 实现了 SqlSession 接口,这就是说,在代码中无需对 MyBatis 的 SqlSession 进行替换。 SqlSessionTemplate 通常是被用来替代默认的 MyBatis 实现的 DefaultSqlSession , 因为模板可以参与到 Spring 的事务中并且被多个注入的映射器类所使 用时也是线程安全的。相同应用程序中两个类之间的转换可能会引起数据一致性的问题。

SqlSessionTemplate 对象可以使用 SqlSessionFactory 作为构造方法的参数来创建。

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

这个 bean 现在可以直接注入到 DAO bean 中。你需要在 bean 中添加一个 SqlSession 属性,就像下面的代码:

public class UserDaoImpl implements UserDao {
         

  private SqlSession sqlSession;

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

  public User getUser(String userId) {
         
    return (User) sqlSession.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}

如下注入 SqlSessionTemplate:

<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
  <property name="sqlSession" ref="sqlSession" />
</bean>

SqlSessionTemplate 有一个使用 ExecutorType 作为参数的构造方法。这允许你用来 创建对象,比如,一个批量 SqlSession,但是使用了下列 Spring 配置的 XML 文件:

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
  <constructor-arg index="1" value="BATCH" />
</bean>

现在你所有的语句可以批量操作了,下面的语句就可以在 DAO 中使用了。

public void insertUsers(User[] users) {
         
   for (User user : users) {
         
     sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertUser", user);
   }
 }

注意,如果所需的执行方法和默认的 SqlSessionFactory 设置不同,这种配置风格才 能使用。

对这种形式需要说明的是当这个方法被调用时,不能有一个存在使用不同 ExecutorType 运行的事务。也要保证在不同的事务中,使用不同执行器来调用 SqlSessionTemplate 时, (比如 PROPAGATION_REQUIRES_NEW)或完全在一个事务外面。

SqlSessionDaoSupport

SqlSessionDaoSupport 是 一 个 抽象 的支 持 类, 用来 为你 提供 SqlSession 。 调 用 getSqlSession()方法你会得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法, 就像下面这样:

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
         
  public User getUser(String userId) {
         
    return (User) getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}

通常 MapperFactoryBean 是这个类的首选,因为它不需要额外的代码。但是,如果你 需要在 DAO 中做其它非 MyBatis 的工作或需要具体的类,那么这个类就很有用了。

SqlSessionDaoSupport 需要一个 sqlSessionFactory 或 sqlSessionTemplate 属性来 设 置 。 这 些 被 明 确 地 设 置 或 由 Spring 来 自 动 装 配 。 如 果 两 者 都 被 设 置 了 , 那 么 SqlSessionFactory 是被忽略的。

假设类 UserMapperImpl 是 SqlSessionDaoSupport 的子类,它可以在 Spring 中进行如 下的配置:

<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserDaoImpl">
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lemonyFei/article/details/8925344

智能推荐

C# Lambda表达式和linq表达式 之 匿名对象查询接收-程序员宅基地

文章浏览阅读376次。很多小伙伴都用过Lambda表达式和linq表达式,用起来也得心应手,但是有的小伙伴对匿名对象的查询与接收比较迷茫,(没有定义相应的实体),怎么在where()里面进行条件筛选呢?常规用法我就不说了,我们来说一下匿名对象怎么操作。我们先看一下Lambda表达式的形式:Lambda表达式说明x=>x*x返回参数值的平方x=>{r..._list>查询里面的数据并取值

进程在操作系统内核程序临界区不能进行调度与切换,在普通临界区能够调度与切换?什么是临界资源?什么是临界区_为什么访问普通临界区可以发生进程调度-程序员宅基地

文章浏览阅读3.9k次,点赞11次,收藏20次。操作系统考研真题进程在操作系统内核程序临界区不能进行调度与切换,在普通临界区能够调度与切换?什么是临界资源?什么是临界区_为什么访问普通临界区可以发生进程调度

[海思]--Hi3516a--GPIO(用户层)_海思sdk用户层控制gpio-程序员宅基地

文章浏览阅读5.6k次,点赞2次,收藏15次。[海思]–Hi3516a–GPIO(用户层)控制篇海思Hi3516aGPIO用户层控制篇gpio 玩过单片机的人都应该很熟悉了,然而在linux中,gpio操作属于内核层的范畴,用户想要直接配置gpio的模式和读取gpio的状态是比较困难的一件事情。那么本文主要讲述如何利用海思sdk已有的资源来实现用户层的gpio操作_海思sdk用户层控制gpio

javaweb基于SSH开发家庭收支管理系统源码 课程设计 大作业 毕业设计-程序员宅基地

文章浏览阅读185次。Jdk+Tomcat6+SQLSERVER数据库。开发家庭收支管理系统(大作业/毕业设计)开发环境: Windows操作系统。

xshell 打开文件跳转到最后_XShell 技巧-程序员宅基地

文章浏览阅读658次。说明:很长时间了,一直用XShell,但是总是用鼠标操作,后来想用其他方式代替鼠标,一想肯定有快捷方式等,这里就先记下一遍有用的博文,转自:http://sundful.iteye.com/blog/704079XShell是一款Windows下非常优秀的远程连接Linux主机的工具,是我平常使用不可缺少的工具。今天没事看了下XShell的帮助,找到了一些很实用的技巧,分享给大家。复制和粘贴由于..._xshell查看json文件怎么跳转底部

深度优先搜索python_python深度优先搜索算法-程序员宅基地

文章浏览阅读3.8k次,点赞2次,收藏17次。深度优先搜索概念深度优先搜索和广度优先搜索一样,都是对图进行搜索的算法,目的也都是从起点开始搜索直到到达指定顶点(终点)。深度优先搜索会沿着一条路径不断往下搜索直到不能再继续为止,然后再折返,开始搜索下一条候补路径。具体而言步骤1A为起点,G为终点。一开始我们在起点A上。步骤2将可以从A直达的三个顶点B、C、D设为下一步的候补顶点。步骤3从候补顶点中选出一个顶点。优先选择最新成为候补的点,如果几个顶点同时成为候补,那么可以从中随意选择一个。步骤4此处B、C、D同时成为候补,所以_python深度优先搜索算法

随便推点

3DES加密解密_3des的加密过程为des加密--程序员宅基地

文章浏览阅读1.2w次。3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密。3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文,这样:3DES加密过程为:C_3des的加密过程为des加密-

推荐-25个开源软件-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏9次。今天,我想让您对下一个 25 个出色的开源软件。您可以安装它,并且几乎开箱即用!_开源软件

opencv 根据仿射变换矩阵计算新坐标点_怎么通过变化矩阵求坐标-程序员宅基地

文章浏览阅读2k次。# 计算经过仿射变换新的boxes # boxes表示原始坐标点,target_point表示经过仿射变换后新的坐标点 pts = np.float32(boxes).reshape([-1, 2]) # 要映射的点 pts = np.hstack([pts, np.ones([len(pts), 1])]).T target_point = np.dot(RotateMatrix, pts) # 映射后的坐标 //src_point表示原图的坐标点,resu..._怎么通过变化矩阵求坐标

【温度预测】麻雀算法优化BP神经网络SSA-BP温度预测【含Matlab源码 3236期】-程序员宅基地

文章浏览阅读588次。麻雀算法优化BP神经网络SSA-BP温度预测完整的代码,方可运行;可提供运行操作视频!适合小白!_麻雀算法优化bp神经网络

PostgreSQL 与 MySQL 相比,优势何在?_pl/pgsql与sql语言相比,优势有哪些?-程序员宅基地

文章浏览阅读453次。如题专区:PostgreSQL 与 MySQL 相比,优势何在?以下文章列举了更为直观的对比图:作者:动力节点在线链接:https://www.zhihu.com/question/20010554/answer/743955463来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。本文是转载文章。MySQL相对于PostgreSQL的劣势:PostgreSQL主要优势:  1. PostgreSQL完全免费,而且是.._pl/pgsql与sql语言相比,优势有哪些?

在IDEA中搭建基于Maven的SSM框架(一)Maven项目搭建_idea使用maven搭建ssm框架-程序员宅基地

文章浏览阅读796次,点赞4次,收藏25次。在IDEA中搭建SSM框架:Maven项目搭建开发环境:JDK1.8、MySQL、Maven3.6开发工具:IDEA 2018.3.1一、搭建基于Maven的web项目1.创建新项目2.选择Maven,JDK,项目原型3.填写项目组织标识符、项目标识符4.配置Maven5.填写项目信息6.点击finish后,如果项目本地路径不存在,IDEA会提..._idea使用maven搭建ssm框架

推荐文章

热门文章

相关标签