当前位置: 首页 > news >正文

JAVA:MyBatis 核心组件详解的技术指南

1、简述

在企业级开发中,ORM(对象关系映射)框架被广泛应用,而 MyBatis 是其中最灵活、最常用的框架之一。它不像 Hibernate 那样高度自动化,而是通过 SQL 映射 的方式,将数据库操作和 Java 对象绑定起来。
要想深入掌握 MyBatis,就必须理解它的 核心组件

在这里插入图片描述


2、核心组件

MyBatis 的核心组件主要包括以下几个:

SqlSessionFactoryBuilder

🔹 负责构建 SqlSessionFactory

🔹 一般应用程序只需要一个 SqlSessionFactory

SqlSessionFactory

🔹 用于创建 SqlSession

🔹 线程安全,建议单例管理。

SqlSession

🔹 提供了执行 SQL 命令的方法,如 selectOneselectListinsertupdatedelete

🔹 管理事务(commit / rollback)。

🔹 生命周期短,类似于 JDBC 的 Connection

Mapper 接口(DAO 层接口)

🔹 通过 MyBatis 的动态代理机制,将接口方法与 SQL 映射文件中的 SQL 语句绑定。

🔹 极大减少了模板代码。

映射器(Mapper XML 文件)

🔹 定义了 SQL 语句以及输入输出参数映射规则。

🔹 将 SQL 和 Java 对象解耦。


4、核心组件之间的关系

SqlSessionFactoryBuilder → SqlSessionFactory → SqlSession → Mapper → SQL

流程:

🔹 通过 SqlSessionFactoryBuilder 解析 MyBatis 配置文件;

🔹 创建 SqlSessionFactory

🔹 从工厂获取 SqlSession

🔹 通过 Mapper 接口 执行 SQL;

🔹 MyBatis 自动完成 SQL 与 Java 对象的映射。


5、实践样例

5.1 数据库表

创建一张 users 表:

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50),email VARCHAR(100)
);

插入数据:

INSERT INTO users(username, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com');

5.2 Maven 依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version>
</dependency>

5.3 MyBatis 配置文件(mybatis-config.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/testdb?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>

5.4 实体类

public class User {private Integer id;private String username;private String email;// Getter & Setter
}

5.5 Mapper 接口

public interface UserMapper {User selectUserById(Integer id);List<User> selectAllUsers();int insertUser(User user);
}

5.6 Mapper XML 文件(mapper/UserMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="UserMapper"><select id="selectUserById" parameterType="int" resultType="User">SELECT id, username, email FROM users WHERE id = #{id}</select><select id="selectAllUsers" resultType="User">SELECT id, username, email FROM users</select><insert id="insertUser" parameterType="User">INSERT INTO users(username, email) VALUES (#{username}, #{email})</insert>
</mapper>

5.7 测试代码

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;
import java.util.List;public class MyBatisDemo {public static void main(String[] args) throws Exception {// 1. 加载 MyBatis 配置文件InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 2. 获取 SqlSessiontry (SqlSession session = sqlSessionFactory.openSession(true)) {UserMapper mapper = session.getMapper(UserMapper.class);// 查询单个用户User user = mapper.selectUserById(1);System.out.println("单个用户:" + user.getUsername());// 查询所有用户List<User> users = mapper.selectAllUsers();users.forEach(u -> System.out.println("用户:" + u.getUsername()));// 插入用户User newUser = new User();newUser.setUsername("Charlie");newUser.setEmail("charlie@example.com");mapper.insertUser(newUser);System.out.println("插入成功");}}
}

6、总结

🔹 SqlSessionFactoryBuilder:构建工厂
🔹 SqlSessionFactory:生产 SqlSession(线程安全)
🔹 SqlSession:执行 SQL(生命周期短)
🔹 Mapper 接口:面向接口编程,简化 DAO
🔹 Mapper XML:管理 SQL 与对象映射

这种设计既保留了 SQL 的灵活性,又大幅降低了 JDBC 的模板代码量,非常适合中大型企业项目。

http://www.xdnf.cn/news/1332775.html

相关文章:

  • Mac电脑 Pixelmator Pro 专业图像处理【媲美PS】
  • 基于FPGA的实时图像处理系统(2)——VGA显示彩条和图片
  • 简笔成画:让AI绘画变得简单而有趣
  • 国产化PDF处理控件Spire.PDF教程:如何使用 Python 添加水印到 PDF
  • Map 和 Set
  • 19.web api 10
  • docker 部署
  • Go协程:从汇编视角揭秘实现奥秘
  • day31 SQLITE
  • 【38页PPT】关于5G智慧园区整体解决方案(附下载方式)
  • spring整合JUnit
  • 主从功能组图示的扩展理解
  • PyTorch API 2
  • 【数据结构】递归与非递归:归并排序全解析
  • week3-[分支结构]2023
  • Linux上安装MySQL 二进制包
  • 细说数仓中不同类型的维度
  • 10M25DCF484C8G Altera FPGA MAX10
  • 华为云服务器(ECS)新手入门:注册、购买与使用实操教程
  • 算法提升树形数据结构-(线段树)
  • 有关SWD 仿真和PA.15, PB3, PB4的冲突问题
  • Mac 上安装并使用 frpc(FRP 内网穿透客户端)指南
  • AI + 金融领域 + 落地典型案例
  • UTF-8 编解码可视化分析
  • IDM 下载失败排查全攻略
  • 移动端网页调试实战 Cookie 丢失问题的排查与优化
  • 前置端子铅酸蓄电池:结构革新驱动下的全球市场格局与产业机遇
  • 沪深股指期货指数「IF000」期货行情怎么看?
  • JS对象与JSON转换全解析
  • 第12课_Rust项目实战