在 Spring 中,數據持久化是將應用程序中的數據保存到持久化存儲(如數據庫)中的過程 ,主要通過以下幾種方式實現:
1. JDBC(Java Database Connectivity)
- 原理:JDBC 是 Java 訪問關系型數據庫的標準 API,提供了與數據庫建立連接、執行 SQL 語句、處理結果集等功能。Spring 對 JDBC 進行了封裝,通過
JdbcTemplate
等工具類簡化數據庫操作,降低了使用原生 JDBC 時繁瑣的資源管理(如連接的獲取、關閉等)和異常處理工作。 - 示例:配置數據源后,注入
JdbcTemplate
,使用query
方法查詢數據,update
方法執行增刪改操作 。比如jdbcTemplate.query("SELECT * FROM users", new BeanPropertyRowMapper<>(User.class));
可將查詢結果映射為User
對象列表。 - 適用場景:適用于對數據庫操作性能要求較高,希望直接控制 SQL 語句,且數據庫操作相對簡單的場景。
2. JPA(Java Persistence API)
- 原理:JPA 是 Java EE 規范,定義了對象與關系數據庫之間的映射規則,以及對實體對象進行持久化操作的標準方式。它不是具體框架,而是一種規范,Hibernate 等是其常見實現。Spring Boot 可集成 JPA 實現,通過注解(如
@Entity
定義實體類、@Column
定義列等 )來映射實體和數據庫表結構。 - 示例:定義實體類
@Entity @Table(name = "user") public class User { @Id @GeneratedValue private Long id; @Column private String name; // 省略getter和setter }
?,然后創建繼承JpaRepository
的接口UserRepository extends JpaRepository<User, Long>
,即可利用其提供的 CRUD 方法操作數據庫。 - 適用場景:適用于關系型數據庫場景,尤其在業務邏輯復雜、對象關系映射較多,希望以面向對象方式操作數據庫,減少 SQL 編寫量時使用。
3. Spring Data JPA
- 原理:是 Spring 提供的基于 JPA 的模塊,進一步簡化 JPA 使用。它基于約定優于配置原則,根據方法命名規則可自動生成查詢方法,還提供了分頁、排序等高級功能,以及復雜查詢 DSL(Domain-Specific Language) 。
- 示例:除上述
UserRepository
繼承JpaRepository
使用默認方法外,還可自定義方法,如List<User> findByNameContaining(String name);
,框架會自動生成相應 SQL 實現按名字模糊查詢用戶。 - 適用場景:在使用 JPA 的基礎上,進一步追求開發效率,減少樣板代碼編寫,適用于大多數關系型數據庫的 CRUD 操作及復雜查詢場景。
4. MyBatis
- 原理:是流行的持久化框架,支持自定義 SQL、存儲過程及高級映射。MyBatis 使用 XML 或注解配置 SQL 語句與對象的映射關系,靈活控制 SQL 執行,可手動編寫復雜 SQL 滿足特定業務需求。
- 示例:在 XML 中配置
<select id="selectUser" parameterType="long" resultType="User"> SELECT * FROM user WHERE id = #{id} </select>
?,然后在 Mapper 接口中定義User selectUser(Long id);
?,通過 MyBatis 的 SqlSessionFactory 獲取 SqlSession 執行方法。 - 適用場景:當對 SQL 語句的靈活性和性能優化有較高要求,如復雜的多表關聯查詢、存儲過程調用等場景時適用。
此外,Spring 還提供事務管理機制來保證數據一致性,包括基于注解(@Transactional
?)的聲明式事務管理和編程式事務管理;同時也支持多種數據庫連接池技術,提升數據庫連接的管理效率 。