MyBatis之核心对象与工作流程及SqlSession操作

目录

[1. 📦MyBatis核心对象及工作流程](#1. 📦MyBatis核心对象及工作流程)

​编辑

[1.1. 🎯MyBatis 4个核心对象](#1.1. 🎯MyBatis 4个核心对象)

[1.2. 🕹️MABatis工作流程](#1.2. 🕹️MABatis工作流程)

[2. 📝使用SqlSession操作数据库初体验](#2. 📝使用SqlSession操作数据库初体验)

[2.1. 读取核心配置文件](#2.1. 读取核心配置文件)

[2.2. 创建SqlSessionFactoryBuilder对象](#2.2. 创建SqlSessionFactoryBuilder对象)

[2.3. 使用SqlSessionFactoryBuilder获取SqlSessionFactory对象](#2.3. 使用SqlSessionFactoryBuilder获取SqlSessionFactory对象)

[2.4. SqlSessionFactory对象获取SqlSession对象](#2.4. SqlSessionFactory对象获取SqlSession对象)

[2.5. 使用SqlSession直接操作数据库](#2.5. 使用SqlSession直接操作数据库)

[2.6. 关闭资源](#2.6. 关闭资源)

[3. ✨总结](#3. ✨总结)


💡【开发哲学共勉】

像 MyBatis 拆分 Builder/Factory/Session 一样,把大问题拆成只做一件事的小模块

🎉 前言

本节来讲解一下MyBatis核心对象和工作流程及使用SQLSession来操作数据库,旨在帮助大家更好的理解和掌握相关的知识(๑•̀ㅂ•́)و✧

个人主页:艺杯羹 🌿

系列专栏:MyBatis🚀

1. 📦MyBatis核心对象及工作流程

先看流程图,看完下面的讲解内容,再回过来看,就豁然开朗了(๑•̀ㅂ•́)و✧

1.1. 🎯MyBatis 4个核心对象

  1. SqlSessionFactoryBuilder

    可以理解成一个工厂的建造者,可以来创建工厂 --- SqlSessionFactory

  2. SqlSessionFactory

    可以理解成一个工厂,可以来生产SqlSession对象

  3. SqlSession

    1. 可以操作数据库

    2. 也可以创造Mapper代理对象操作数据库

  4. Mapper

    持久层接口的代理对象,实现持久层接口,来操作数据库

对象名称 理解类比 核心功能描述
SqlSessionFactoryBuilder 工厂建造者 负责创建 SqlSessionFactory 工厂,如同建筑师按图纸搭建工厂框架,仅在初始化时使用一次
SqlSessionFactory 数据库会话工厂 作为生产 SqlSession 的工厂,统一管理数据库连接配置,以单例模式存在,贯穿项目生命周期
SqlSession 数据库操作会话 直接执行 SQL 语句操作数据库,可管理事务;也能创建 Mapper 代理对象,是与数据库交互的核心接口
Mapper 持久层接口代理对象 实现持久层接口的动态代理,将接口方法映射为 SQL 操作,无需手写 SQL 即可完成数据库交互

它的工作流程也和上面介绍的这个顺序是一样的

1.2. 🕹️MABatis工作流程

  1. 创建 SqlSessionFactoryBuilder 对象(创建工程的建造者)

  2. SqlSessionFactoryBuilder 对象创建SqlSessionFactory (建造工程,成为建造者模式)

  3. SqlSessionFactory 对象生产了 SqlSession 对象:工厂模式

  4. SqlSession 对象创建了持久层接口的代理对象:动态代理模式

  5. 代理对象 Mapper操作数据库

现在可以回过去看看,工作的流程图,就能看懂了

2. 📝使用SqlSession操作数据库初体验

上面提到了可以使用代理对象Mapper获取对象,也可以SqlSession来获取对象,这种用的比较少那么先来看看SqlSession是如何获取对象的

2.1. 读取核心配置文件

java 复制代码
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");

2.2. 创建SqlSessionFactoryBuilder对象

java 复制代码
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

2.3. 使用SqlSessionFactoryBuilder获取SqlSessionFactory对象

java 复制代码
SqlSessionFactory factory = builder.build(is);

2.4. SqlSessionFactory对象获取SqlSession对象

java 复制代码
SqlSession session = factory.openSession();

2.5. 使用SqlSession直接操作数据库

java 复制代码
List<User> users = session.selectList("com.yibeigen.mapper.UserMapper.findAll");
// 输出
users.forEach(System.out::println);

2.6. 关闭资源

java 复制代码
session.close();
is.close();

完整代码

java 复制代码
@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讲解就到此结束了,希望对你有所帮助😊

相关推荐
jason.zeng@150220715 分钟前
Androidr入门环境搭建
java·kotlin
摇滚侠18 分钟前
整洁的桌面和任务栏 Java 开发工程师提效方法
java·开发语言
每天都要加油呀!1 小时前
多租户中间件适配
java·多租户
014-code1 小时前
Java 并发中的原子类
java·开发语言·并发
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第29题:静态代理和动态代理的区别是什么
java·开发语言·后端·面试·代理模式
善恶怪客1 小时前
Java-数组和可变参数
java·开发语言
小编码上说1 小时前
LSH(局部敏感哈希)分桶,海量数据下的相似性搜索解决方案
java·spring boot·缓存·langchain4j·lsh·局部敏感哈希·ai调用优化
计算机_毕业设计2 小时前
java-springboot数字藏品系统 基于 SpringBoot 的区块链数字艺术品交易平台 Java 微服务架构下的加密藏品展示与拍卖系统计算机毕业设计
java·spring boot·课程设计
ONVO ncen2 小时前
Redis6.2.6下载和安装
java
丑八怪大丑2 小时前
JDK8-17新特性
java·开发语言