# MyBatis的知識點有哪些
## 目錄
1. [MyBatis簡介](#1-mybatis簡介)
2. [核心組件與工作原理](#2-核心組件與工作原理)
3. [配置詳解](#3-配置詳解)
4. [SQL映射文件](#4-sql映射文件)
5. [動態SQL](#5-動態sql)
6. [緩存機制](#6-緩存機制)
7. [插件開發](#7-插件開發)
8. [與Spring集成](#8-與spring集成)
9. [高級特性](#9-高級特性)
10. [最佳實踐](#10-最佳實踐)
11. [常見問題](#11-常見問題)
---
## 1. MyBatis簡介
### 1.1 什么是MyBatis
MyBatis是一款優秀的**持久層框架**,它支持定制化SQL、存儲過程以及高級映射。MyBatis避免了幾乎所有的JDBC代碼和手動設置參數以及獲取結果集的過程。
### 1.2 核心特點
- **輕量級**:無需依賴容器即可運行
- **SQL與代碼分離**:通過XML/注解配置SQL
- **靈活的結果映射**:支持自動映射與復雜對象關聯
- **動態SQL**:條件分支、循環等特性
### 1.3 發展歷史
- 起源于Apache的iBatis項目
- 2010年遷移到Google Code后更名為MyBatis
- 當前最新穩定版本為3.5.x
---
## 2. 核心組件與工作原理
### 2.1 架構圖
```mermaid
graph TD
A[接口層] --> B[核心處理層]
B --> C[基礎支撐層]
組件 | 說明 |
---|---|
SqlSessionFactory | 全局單例,創建SqlSession |
SqlSession | 包含執行SQL的所有方法 |
Executor | SQL執行器(Simple/Reuse/Batch) |
MappedStatement | 封裝SQL語句和參數映射 |
StatementHandler | 處理JDBC Statement |
<configuration>
<properties resource="db.properties"/>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<typeAliases>
<package name="com.example.model"/>
</typeAliases>
</configuration>
<mapper namespace="com.example.UserMapper">
<select id="selectUser" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
<resultMap id="userMap" type="User">
<id property="id" column="user_id"/>
<result property="username" column="user_name"/>
</resultMap>
<select id="findActiveBlog" resultType="Blog">
SELECT * FROM blog
<where>
<if test="title != null">
AND title = #{title}
</if>
<choose>
<when test="author != null">
AND author = #{author}
</when>
<otherwise>
AND status = 'ACTIVE'
</otherwise>
</choose>
</where>
</select>
<insert id="batchInsert">
INSERT INTO users(name) VALUES
<foreach item="item" collection="list" separator=",">
(#{item.name})
</foreach>
</insert>
級別 | 范圍 | 生命周期 |
---|---|---|
一級緩存 | SqlSession | 會話級 |
二級緩存 | Mapper | 應用級 |
<cache eviction="LRU" flushInterval="60000" size="512"/>
@Intercepts({
@Signature(type=Executor.class, method="update", args={...})
})
public class MyPlugin implements Interceptor {
// 實現攔截邏輯
}
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<mybatis:scan base-package="com.example.mapper"/>
建議使用@Transactional
注解配合Spring事務管理器
<select id="callProcedure" statementType="CALLABLE">
{call get_user(#{id,mode=IN})}
</select>
自定義處理特殊數據類型(如JSON、枚舉等)
檢查是否配置了<if>
判斷或全局的jdbcTypeForNull
<association>
的fetchType=lazy
<collection>
一次性加載select *
本文共約8050字,詳細介紹了MyBatis的核心知識點和使用技巧。實際開發中應根據項目需求選擇合適的特性組合,并注意框架的版本兼容性問題。 “`
注:此為精簡版大綱,完整8050字版本需要擴展每個章節的詳細說明、代碼示例、性能對比數據、實際案例分析和原理深度解析等內容。建議每個主要章節補充: 1. 背景說明(200-300字) 2. 具體實現(代碼示例+配置示例) 3. 注意事項(常見坑點) 4. 原理剖析(可選) 5. 性能影響分析
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。