【官方中文文档】Mybatis-Spring #使用 SqlSession

这篇具有很好参考价值的文章主要介绍了【官方中文文档】Mybatis-Spring #使用 SqlSession。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 SqlSession

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

SqlSessionTemplate

SqlSessionTemplate 是 MyBatis-Spring 的核心。作为 SqlSession 的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的 SqlSession
SqlSessionTemplate 是线程安全的,可以被多个 DAO 或映射器所共享使用。

当调用 SQL 方法时(包括由 getMapper() 方法返回的映射器中的方法),SqlSessionTemplate 将会保证使用的 SqlSession 与当前 Spring 的事务相关。
此外,它管理 session 的生命周期,包含必要的关闭、提交或回滚操作。另外,它也负责将 MyBatis 的异常翻译成 Spring 中的 DataAccessExceptions

由于模板可以参与到 Spring 的事务管理中,并且由于其是线程安全的,可以供多个映射器类使用,你应该总是SqlSessionTemplate 来替换 MyBatis 默认的 DefaultSqlSession 实现。在同一应用程序中的不同类之间混杂使用可能会引起数据一致性的问题。

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

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
@Configuration
public class MyBatisConfig {
  @Bean
  public SqlSessionTemplate sqlSession() throws Exception {
    return new SqlSessionTemplate(sqlSessionFactory());
  }
}

现在,这个 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 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 参数的构造方法。这允许你使用如下 Spring 配置来批量创建对象,例如批量创建一些 SqlSession:

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
  <constructor-arg index="1" value="BATCH" />
</bean>
@Configuration
public class MyBatisConfig {
  @Bean
  public SqlSessionTemplate sqlSession() throws Exception {
    return new SqlSessionTemplate(sqlSessionFactory(), ExecutorType.BATCH);
  }
}

现在所有的映射语句可以进行批量操作了,可以在 DAO 中编写如下的代码

public class UserService {
  private final SqlSession sqlSession;
  public UserService(SqlSession sqlSession) {
    this.sqlSession = sqlSession;
  }
  public void insertUsers(List<User> users) {
    for (User user : users) {
      sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertUser", user);
    }
  }
}

注意,只需要在希望语句执行的方法与 SqlSessionTemplate 中的默认设置不同时使用这种配置。

这种配置的弊端在于,当调用这个方法时,不能存在使用不同 ExecutorType 的进行中的事务。要么确保对不同 ExecutorTypeSqlSessionTemplate 的调用处在不同的事务中,要么完全不使用事务。

SqlSessionDaoSupport

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

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

在这个类里面,通常更倾向于使用 MapperFactoryBean,因为它不需要额外的代码。但是,如果你需要在 DAO 中做其它非 MyBatis 的工作或需要一个非抽象的实现类,那么这个类就很有用了。

SqlSessionDaoSupport 需要通过属性设置一个 sqlSessionFactorySqlSessionTemplate。如果两个属性都被设置了,那么 SqlSessionFactory 将被忽略。

假设类 UserMapperImplSqlSessionDaoSupport 的子类,可以编写如下的 Spring 配置来执行设置:文章来源地址https://www.toymoban.com/news/detail-667013.html

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

到了这里,关于【官方中文文档】Mybatis-Spring #使用 SqlSession的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Alibaba 官方中文文档

    Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿

    2024年02月14日
    浏览(54)
  • spring5源码篇(9)——mybatis-spring整合原理

    spring-framework 版本:v5.3.19 spring和mybatis的整合无非主要就是以下几个方面: 1、SqlSessionFactory怎么注入? 2、Mapper代理怎么注入? 3、为什么要接管mybatis事务? 在mybatis-spring中,定义了一个新的factoryBean——SqlSessionFactoryBean,我们将其注入到spring容器即可。 其实也不难猜到,这

    2024年02月03日
    浏览(36)
  • 答疑解惑:解释在Mybatis-Spring下@Mapper与@MapperScan为何不能同时生效以及实现动态条件注册Mapper接口

    若项目中使用了@MapperScan注解后,则@Mapper注解不再生效 , 原因是:@MapperScan注解 会执行@Import(MapperScannerRegistrar.class),而MapperScannerRegistrar又会注册MapperScannerConfigurer BEAN,在MapperScannerConfigurer BEAN中会完成基于配置的包目录扫描注册所有mapper interface代理BEAN,而@Mapper注解的生效

    2024年02月11日
    浏览(39)
  • ClickHouse中文官方文档

    ClickHouse® 是一个面向列的数据库管理系统 (DBMS),用于查询的在线分析处理 (OLAP)。 在“正常”的面向行的 DBMS 中,数据按以下顺序存储: 排 手表ID Java启用 标题 好活动 事件时间 #0 89354350662 1 投资者关系 1 2016-05-18 05:19:20 #1 90329509958 0 联系我们 1 2016-05-18 08:10:20 #2 89953706054 1 使

    2024年02月08日
    浏览(50)
  • MySQL官方文档如何查看,MySQL中文文档

    MySQL官网地址:https://dev.mysql.com/doc/ 比如这里我要找InnoDB架构 MySQL 5.1中文文档地址:https://www.mysqlzh.com/

    2024年02月07日
    浏览(40)
  • Backtrader官方中文文档:第十章Broker经纪人

    本文档参考backtrader官方文档,是官方文档的完整中文翻译,可作为backtrader中文教程、backtrader中文参考手册、backtrader中文开发手册、backtrader入门资料使用。查看本专栏完整内容, 请访问:https://blog.csdn.net/windanchaos/category_12350607.html broker英文是经纪人、中间人,它的主要被用

    2024年02月08日
    浏览(54)
  • Backtrader官方中文文档:第一部分Introduction简介

    本文档参考backtrader官方文档,是官方文档的 完整中文翻译 ,可作为backtrader中文教程、backtrader中文参考手册、backtrader中文开发手册、backtrader入门资料使用。 查看本专栏完整内容,请访问:https://blog.csdn.net/windanchaos/category_12350607.html 本文档参考Backtrader官方文档翻译,结合译

    2024年02月07日
    浏览(35)
  • OpenLayers7官方文档翻译,OpenLayers7中文文档,OpenLayers快速入门

    这个入门文档向您展示如何放一张地图在web网页上。 开发设置使用 NodeJS (至少需要Nodejs 14 或更高版本),并要求安装 git 。 开始使用OpenLayers构建项目的最简单方法是运行: npm create ol-app 第一个命令将创建一个名为 my-app 的目录(如果您愿意,可以使用不同的名称),安装

    2024年02月10日
    浏览(50)
  • Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好

    2024年02月04日
    浏览(53)
  • mybatis的SqlSession

     先来看一下sqlsession接口,发现它为我们定义了很多对数据库数据操作的相关方法。 主要功能: 创建SqlSession实例: 当需要与数据库进行交互时,首先从SqlSessionFactory(通过SqlSessionFactoryBuilder创建)获得一个SqlSession实例。每个SqlSession对象代表一个数据库会话,它不是线程安

    2024年04月27日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包