MyBatis 完全指南
持久层框架,简化 JDBC 操作,支持自定义 SQL、存储过程和高级映射
概述
MyBatis 是 Apache 基金会下的 半自动 ORM 框架,前身是 iBatis。与 Hibernate 的全自动化不同,MyBatis 需要手写 SQL,但提供了更灵活的控制。
核心特点
| 特性 | 说明 |
|---|---|
| SQL 与代码分离 | SQL 在 XML 或注解中维护,不嵌入 Java 代码 |
| 轻量级 | 学习曲线平缓,性能优异 |
| 自动映射 | 自动将 ResultSet 映射为 Java 对象 |
| 动态 SQL | 支持 if、choose、foreach 等动态生成 SQL |
| 插件支持 | 可自定义分页插件、性能拦截器等 |
快速开始
Maven 依赖
xml
<dependencies>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.16</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
</dependencies>基本配置 (mybatis-config.xml)
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//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/mybatis_db"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>核心对象
java
// 1. 获取 SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 2. 获取 SqlSession
try (SqlSession session = sqlSessionFactory.openSession()) {
// 3. 执行 CRUD
User user = session.selectOne("mapper.UserMapper.selectUser", 1);
System.out.println(user);
}核心内容导航
| 专题 | 内容 |
|---|---|
| **Java\MyBatis\MyBatis-核心配置** | 环境配置、类型处理器、插件 |
| **Java\MyBatis\MyBatis-Mapper映射** | XML 映射、注解映射、动态 SQL |
| **Java\MyBatis\MyBatis-关联查询** | 一对一、一对多、多对多 |
| **Java\MyBatis\MyBatis-缓存机制** | 一级缓存、二级缓存、缓存配置 |
| **Java\MyBatis\MyBatis-进阶应用** | 分页插件、逆向工程、Spring 集成 |
核心组件
SqlSessionFactoryBuilder → 构建 SqlSessionFactory
↓
SqlSessionFactory → 创建 SqlSession
↓
SqlSession → 执行 CRUD、操作提交、回滚
↓
Executor → 执行器(Simple/Reuse/Batch)
↓
MappedStatement → SQL 配置(id/type/input/output)Spring Boot 集成
依赖
xml
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>配置 (application.yml)
yaml
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.entity
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl常见问题
| 问题 | 解决方案 |
|---|---|
| 列名与属性名不一致 | 使用 resultMap 或开启驼峰映射 |
| SQL 注入风险 | 使用 #{} 而非 ${} |
| 事务未提交 | 确保 session.commit() 或配置自动提交 |
| Mapper 未找到 | 检查 mapper-locations 路径配置 |
相关页面
- **Java\MyBatis\MyBatis-核心配置** - 配置详解
- **Java\MyBatis\MyBatis-Mapper映射** - SQL 映射
- **Java\MyBatis\MyBatis-关联查询** - 复杂查询
- **Java\MyBatis\MyBatis-缓存机制** - 缓存原理
- **Java\MyBatis\MyBatis-进阶应用** - 高级特性
#标签 #mybatis #orm #持久层 #java #数据库