Skip to content

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 #数据库

Knowledge4J — Java 知识库