执行阶段原理揭秘:从获取 SqlSession 到执行 SQL
2023-12-07 17:40:57
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 应用程序。