Spring Boot極大地簡化了Spring應用的初始配置,配合Spring Data JPA可輕鬆實現數據持久層開發。本文以一個完整的示例項目,演示從項目創建、實體定義、Repository接口編寫、到控制器測試的全流程。
spring-boot-sample-mysql,勾選 Web → Web、SQL → JPA、MySQL,生成並下載項目。File → Import → Existing Maven Projects 選中項目目錄完成導入。com.example 下創建 web 包,引入簡單的 HelloController 與 logback.xml 驗證項目啟動正常。Personpackage com.example.domain;
import javax.persistence.*;
@Entity
public class Person {
@Id @GeneratedValue private Long id;
private String name;
private Integer age;
private String address;
// 無參構造器、全參構造器、Getter/Setter 略
}
使用 @Entity 標記為持久化實體,@Id+@GeneratedValue 實現主鍵自增。
PersonRepositorypackage com.example.repository;
import com.example.domain.Person;
import org.springframework.data.jpa.repository.*;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
List<Person> findByName(String name);
List<Person> findByAddress(String address);
List<Person> findByNameAndAddress(String name, String address);
@Query("select p from Person p where p.name=:name and p.address=:address")
List<Person> withNameAndAddressQuery(@Param("name") String name, @Param("address") String address);
}
繼承 JpaRepository 即可獲得基本 CRUD,方法命名規約自動生成查詢,複雜條件可用 @Query 編寫 JPQL。
package com.example.web;
import com.example.domain.Person;
import com.example.repository.PersonRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.*;
import org.springframework.web.bind.annotation.*;
@RestController
public class DataController {
private static final Logger log = LoggerFactory.getLogger(DataController.class);
@Autowired PersonRepository personRepository;
@RequestMapping("/save")
public Person save(String name, String address, Integer age) {
log.debug("save 開始");
Person p = personRepository.save(new Person(null, name, age, address));
log.debug("save 結束");
return p;
}
@RequestMapping("/q1") public List<Person> q1(String address) {
return personRepository.findByAddress(address);
}
@RequestMapping("/q2") public List<Person> q2(String name, String address) {
return personRepository.findByNameAndAddress(name, address);
}
@RequestMapping("/q3") public List<Person> q3(String name, String address) {
return personRepository.withNameAndAddressQuery(name, address);
}
@RequestMapping("/sort") public List<Person> sort() {
return personRepository.findAll(Sort.by(Sort.Direction.ASC, "age"));
}
@RequestMapping("/page") public Page<Person> page() {
return personRepository.findAll(PageRequest.of(1, 2));
}
}
在 src/main/resources/application.properties 中配置 MySQL 連接:
spring.datasource.url=jdbc:mysql://192.168.56.201:3306/bootsample?useUnicode=true&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jackson.serialization.indent_output=true
啟動應用後,瀏覽器或 Postman 調用:
GET /save?name=aa&address=北京&age=1 等/q1?address=北京、/q2?address=北京&name=aa、/q3?address=北京&name=aa/sort、分頁:/page控制台將輸出 Hibernate 生成的 SQL,確認 JPA 正常工作。
Spring Boot + Spring Data JPA 讓數據訪問層開發變得極其輕量,開發者只需關注實體定義與接口聲明,即可獲得豐富的查詢、分頁、排序能力,極大提升開發效率。