首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring Data JPA 入門實戰:從零構建 Hello World 完整教學

     編輯:Java 綜合教學

Spring Data JPA 入門實戰:Hello World 完整教學

核心概念

  • JPA (Java Persistence API):Java 持久化規範,透過註解/XML 映射物件關聯關係。
  • Spring Data:Spring 子專案,簡化資料存取層開發。
  • Spring Data JPA:JPA 規範的上層實現,開發者只需宣告 Repository 介面,框架自動生成實作,大幅減少 DAO 代碼。

四步驟快速上手

  1. 配置 Spring 整合 JPA (DataSource, EntityManagerFactory, 事務管理)。
  2. 在 Spring 配置中啟用 <jpa:repositories> 掃描 Repository 介面並建立代理 Bean。
  3. 宣告繼承 Repository 的持久層介面。
  4. 在介面中聲明查詢方法,Spring Data 依命名策略自動實現。

詳細實作步驟 (Maven + Spring XML 配置)

1. 專案結構與依賴

建立 Java 專案,libs 目錄放入:Spring Framework、Hibernate、JPA API、C3P0 連接池、MySQL 驅動、Spring Data JPA、SLF4J 日誌門面。

2. Spring 配置 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="https://www.springframework.org/schema/context"
       xmlns:tx="https://www.springframework.org/schema/tx"
       xmlns:jpa="https://www.springframework.org/schema/data/jpa"
       xsi:schemaLocation="...spring-beans.xsd ...spring-context.xsd ...spring-tx.xsd ...spring-data-jpa.xsd">

  <!-- 1. 資料源 -->
  <context:property-placeholder location="classpath:db.properties"/>
  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="driverClass" value="${jdbc.driverClass}"/>
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
  </bean>

  <!-- 2. JPA EntityManagerFactory -->
  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="packagesToScan" value="com.springdata.jpa"/>
    <property name="jpaProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.format_sql">true</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>
      </props>
    </property>
  </bean>

  <!-- 3. 事務管理器 + 註解驅動 -->
  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
  </bean>
  <tx:annotation-driven transaction-manager="transactionManager"/>

  <!-- 4. Spring Data JPA 掃描 -->
  <jpa:repositories base-package="com.springdata.jpa" entity-manager-factory-ref="entityManagerFactory"/>
</beans>

3. db.properties

jdbc.user=root
jdbc.password=mysql
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///jpa

4. 實體類 Person.java

@Entity
@Table(name="JPA_PERSONS")
public class Person {
    @Id @GeneratedValue
    private Integer id;
    private String lastName;
    private String email;
    private Date birth;
    // Getter/Setter 省略
}

5. Repository 介面

public interface PersonRepository extends Repository<Person, Integer> {
    // 依方法名自動生成查詢:findBy + 屬性名
    Person getByLastName(String lastName);
    // 更多範例:
    // List<Person> findByEmailLike(String emailPattern);
    // Page<Person> findAll(Pageable pageable);
}

6. 單元測試驗證

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDataTest {
    @Autowired PersonRepository personRepository;

    @Test
    public void testGetByLastName() {
        Person p = personRepository.getByLastName("AA");
        System.out.println(p);
    }
}

常見坑點與解決

  • ClassNotFoundException: org.slf4j.LoggerFactory:Spring Data 依賴 SLF4J,需補上 slf4j-api 與實作 (如 logback-classic)。
  • 表未自動建立:確認 hibernate.hbm2ddl.auto=update 且 Entity 掃描路徑正確。
  • 方法命名規則:findBy、getBy、queryBy + 屬性名 (駝峰);支援 And/Or、Like/Between 等關鍵字。

進階學習資源

本教學參考「尚硅谷 JPA 教學視頻」,視頻下載:百度網盤。建議後續學習:自定義 @Query、Specification 動態查詢、審計、多租戶等進階特性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved