文章目錄
- MyBatis 簡介
- 1. MyBatis 核心特點
- 2. MyBatis 核心組件
- 3. MyBatis 基本使用示例
- (1) 依賴引入(Maven)
- (2) 定義 Mapper 接口
- (3) 定義實體類
- (4) 在 Service 層調用
- 4. MyBatis 與 JPA/Hibernate 對比
MyBatis 簡介
MyBatis 是一款優秀的 持久層框架(ORM 框架),它支持 定制化 SQL、存儲過程以及高級映射,避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集的過程。MyBatis 可以使用簡單的 XML 或注解 來配置和映射數據庫操作,使得 Java 開發者可以更專注于 SQL 本身,而不需要過多處理 JDBC 的繁瑣操作。
1. MyBatis 核心特點
? 輕量級:相比 Hibernate,MyBatis 更加輕量,不強制使用特定的對象關系映射(ORM)方式。
? 靈活的 SQL 控制:開發者可以編寫原生 SQL,優化復雜查詢。
? 支持動態 SQL:提供 <if>
, <choose>
, <foreach>
等標簽,便于構建動態查詢。
? 易于集成:可以與 Spring、Spring Boot 無縫集成(如 mybatis-spring-boot-starter
)。
? 緩存機制:支持一級緩存(SqlSession 級別)和二級緩存(Mapper 級別),提高查詢性能。
2. MyBatis 核心組件
組件 | 說明 |
---|---|
SqlSessionFactory | 用于創建 SqlSession ,是 MyBatis 的核心對象。 |
SqlSession | 代表一次數據庫會話,用于執行 SQL 并獲取映射結果。 |
Mapper 接口 | 定義數據庫操作的方法,MyBatis 會動態生成實現類。 |
Mapper XML | 存放 SQL 映射文件,定義 SQL 語句和結果映射規則。 |
Configuration | 存儲 MyBatis 的所有配置信息(數據源、緩存、映射等)。 |
3. MyBatis 基本使用示例
(1) 依賴引入(Maven)
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>
(如果使用 Spring Boot 3.x,推薦 3.0.x
版本;Spring Boot 2.x 可用 2.3.x
)
(2) 定義 Mapper 接口
@Mapper // Spring Boot 會自動掃描并注冊該接口
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(Long id);@Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}
(也可以用 XML 方式定義 SQL)
(3) 定義實體類
public class User {private Long id;private String name;private String email;// getters & setters
}
(4) 在 Service 層調用
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Long id) {return userMapper.getUserById(id);}public void addUser(User user) {userMapper.insertUser(user);}
}
4. MyBatis 與 JPA/Hibernate 對比
特性 | MyBatis | JPA/Hibernate |
---|---|---|
SQL 控制 | 開發者完全控制 SQL | 自動生成 SQL,也可自定義 |
靈活性 | 適合復雜查詢 | 適合標準 CRUD |
學習曲線 | 較簡單 | 較復雜(需掌握 JPA 規范) |
性能優化 | 手動優化 SQL | 自動優化,但可能不夠靈活 |
適用場景 | 需要精細控制 SQL 的項目 | 快速開發、標準化的項目 |
過分簡單了,后面會補充的。。