返回

执行阶段原理揭秘:从获取 SqlSession 到执行 SQL

见解分享

MyBatis 技术解密(三):执行阶段

前言

在前面两篇文章中,我们深入探讨了 MyBatis 的初始化阶段。现在,让我们转向执行阶段,这是 MyBatis 发挥其魔力的地方。在本文中,我们将揭开执行阶段的神秘面纱,深入了解其工作原理。

获取 SqlSession

执行阶段的起点是获取一个 SqlSession 对象。SqlSession 是 MyBatis 和数据库交互的代理对象,负责执行 SQL 语句、管理事务以及处理结果集。

要获取 SqlSession,我们可以使用 SqlSessionFactory 对象调用 openSession() 方法:

SqlSessionFactory sqlSessionFactory = ...;
SqlSession sqlSession = sqlSessionFactory.openSession();

openSession() 方法有两种重载形式:

  • openSession():创建一个未提交的事务会话。
  • openSession(boolean autoCommit):创建一个自动提交的事务会话。

获取 Mapper 代理

获取 SqlSession 后,我们可以使用它来获取 Mapper 代理。Mapper 代理是 MyBatis 根据 XML 映射文件自动生成的接口实现。它提供了方法来执行 SQL 语句,并映射结果集到对象。

要获取 Mapper 代理,我们可以使用 SqlSession 对象调用 getMapper() 方法:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

执行 SQL 语句

获取 Mapper 代理后,我们可以使用它来执行 SQL 语句。MyBatis 支持多种类型的 SQL 语句,包括:

  • SELECT:查询数据
  • INSERT:插入数据
  • UPDATE:更新数据
  • DELETE:删除数据

要执行 SQL 语句,我们可以使用 Mapper 代理调用相应的方法。例如,要查询所有用户,我们可以使用以下代码:

List<User> users = userMapper.findAll();

处理结果集

执行 SQL 语句后,MyBatis 会返回一个结果集。结果集是一个包含查询结果的集合。

MyBatis 提供了多种方法来处理结果集,包括:

  • List<T>:将结果映射到一个列表中。
  • Map<String, Object>:将结果映射到一个键值对映射中。
  • ResultSet:直接访问底层结果集。

要映射结果集,我们可以使用 Mapper 方法的返回类型来指定映射方式。例如,要将查询结果映射到 List<User> 中,我们可以使用以下代码:

List<User> users = userMapper.findAll();

提交和回滚事务

如果使用未提交事务会话,则需要在完成操作后手动提交或回滚事务。

要提交事务,可以使用 SqlSession 对象调用 commit() 方法:

sqlSession.commit();

要回滚事务,可以使用 SqlSession 对象调用 rollback() 方法:

sqlSession.rollback();

总结

在本文中,我们深入探讨了 MyBatis 执行阶段。我们学习了如何获取 SqlSession 和 Mapper 代理,如何执行 SQL 语句,以及如何处理结果集。此外,我们还了解了如何提交和回滚事务。通过对这些原理的透彻理解,我们能够编写更有效、更健壮的 MyBatis 应用程序。