目录
2.2. 创建SqlSessionFactoryBuilder对象
2.3. 使用SqlSessionFactoryBuilder获取SqlSessionFactory对象
2.4. SqlSessionFactory对象获取SqlSession对象
💡【开发哲学共勉】
像 MyBatis 拆分 Builder/Factory/Session 一样,把大问题拆成只做一件事的小模块
🎉 前言
本节来讲解一下MyBatis核心对象和工作流程及使用SQLSession来操作数据库,旨在帮助大家更好的理解和掌握相关的知识(๑•̀ㅂ•́)و✧
个人主页:艺杯羹 🌿
系列专栏:MyBatis🚀
1. 📦MyBatis核心对象及工作流程
先看流程图,看完下面的讲解内容,再回过来看,就豁然开朗了(๑•̀ㅂ•́)و✧
1.1. 🎯MyBatis 4个核心对象
SqlSessionFactoryBuilder
可以理解成一个工厂的建造者,可以来创建工厂 --- SqlSessionFactorySqlSessionFactory
可以理解成一个工厂,可以来生产SqlSession对象SqlSession
可以操作数据库
也可以创造Mapper代理对象操作数据库
Mapper
持久层接口的代理对象,实现持久层接口,来操作数据库
对象名称 | 理解类比 | 核心功能描述 |
---|---|---|
SqlSessionFactoryBuilder | 工厂建造者 | 负责创建 SqlSessionFactory 工厂,如同建筑师按图纸搭建工厂框架,仅在初始化时使用一次 |
SqlSessionFactory | 数据库会话工厂 | 作为生产 SqlSession 的工厂,统一管理数据库连接配置,以单例模式存在,贯穿项目生命周期 |
SqlSession | 数据库操作会话 | 直接执行 SQL 语句操作数据库,可管理事务;也能创建 Mapper 代理对象,是与数据库交互的核心接口 |
Mapper | 持久层接口代理对象 | 实现持久层接口的动态代理,将接口方法映射为 SQL 操作,无需手写 SQL 即可完成数据库交互 |
它的工作流程也和上面介绍的这个顺序是一样的
1.2. 🕹️MABatis工作流程
- 创建 SqlSessionFactoryBuilder 对象(创建工程的建造者)
- SqlSessionFactoryBuilder对象创建SqlSessionFactory(建造工程,成为建造者模式)
SqlSessionFactory 对象生产了 SqlSession 对象:工厂模式
SqlSession 对象创建了持久层接口的代理对象:动态代理模式
代理对象 Mapper 操作数据库
现在可以回过去看看,工作的流程图,就能看懂了
2. 📝使用SqlSession操作数据库初体验
上面提到了可以使用代理对象Mapper获取对象,也可以SqlSession来获取对象,这种用的比较少那么先来看看SqlSession是如何获取对象的
2.1. 读取核心配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
2.2. 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
2.3. 使用SqlSessionFactoryBuilder获取SqlSessionFactory对象
SqlSessionFactory factory = builder.build(is);
2.4. SqlSessionFactory对象获取SqlSession对象
SqlSession session = factory.openSession();
2.5. 使用SqlSession直接操作数据库
List<User> users = session.selectList("com.yibeigen.mapper.UserMapper.findAll");
// 输出
users.forEach(System.out::println);
2.6. 关闭资源
session.close();
is.close();
完整代码
@Test
public void testFindAll2() throws Exception {
// (1)读取核心配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
// (2)创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// (3)SqlSessionFactoryBuilder对象获取SqlSessionFactory对象
SqlSessionFactory factory = builder.build(is);
// (4)SqlSessionFactory对象获取SqlSession对象
SqlSession session = factory.openSession();
// (5)SqlSession直接操作数据库
List<User> users = session.selectList("com.yibeigen.mapper.UserMapper.findAll");
users.forEach(System.out::println);
// (6)关闭资源
session.close();
is.close();
}
3. ✨总结
MyBatis核心对象和工作流程及sqlsession讲解就到此结束了,希望对你有所帮助😊