SpringBoot(17)——使用SpringDataJPA

elim168發表於2019-01-07

使用Spring Data JPA

使用Spring Data JPA需要在pom.xml中新增spring-boot-starter-data-jpa依賴。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

之後就可以在應用中定義Entity了,並使用javax.persistence相關注解了。比如下面就定義了一個簡單的User實體。

@Entity
@Table(name="tb_user")
@Data
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    
    private String username;
    
}

之後可以定義自己的JpaRepository。

public interface UserJpaRepository extends JpaRepository<User, Long> {

    List<User> findByName(String name);
    
}

如果你的目錄結構是按照Spring Boot建議的目錄結構,上面定義的Repository將自動被Spring Boot掃描到,並被註冊為一個Spring bean。Spring Boot預設會掃描標註了@SpringBootApplication註解的Class所在的package下面的所有的package。如果需要掃描其它目錄下的Repository,則可以通過@EnableJpaRepositories("com.xxx.package")來指定。

之後就可以在Service中注入定義好的Repository進行相應的增刪改查了,比如下面這樣:

@Service
public class UserService {

    @Autowired
    private UserJpaRepository userRepository;
    
    public void save(User user) {
        this.userRepository.save(user);
    }
    
    public void save(List<User> users) {
        this.userRepository.saveAll(users);
    }
    
    public List<User> findByName(String name) {
        return this.userRepository.findByName(name);
    }
    
    public Optional<User> findById(Long id) {
        return this.userRepository.findById(id);
    }
    
}

新增了spring-boot-starter-data-jpa依賴後,預設會使用JPA的Hibernate實現。org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration將負責JPA的自動配置,其只有在bean容器中只定義了一個DataSource時才會進行自動配置。可以通過spring.jpa字首的配置屬性配置Hibernate JPA的相關資訊,對應的配置屬性將由org.springframework.boot.autoconfigure.orm.jpa.JpaProperties負責接收。可以通過spring.jpa.show-sql指定是否需要列印SQL語句,可以通過spring.jpa.hibernate.*指定Hibernate特定的配置資訊。比如通過spring.jpa.hibernate.ddl-auto指定是否需要基於實體配置自動應用對應的DDL語句到資料庫,它相當於使用Hibernate時的hibernate.hbm2ddl.auto

spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

Spring Boot會自動註冊org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor,以便可以在Web應用中使用懶載入。如果不需要自動註冊OpenEntityManagerInViewInterceptor,則可以配置spring.jpa.open-in-view=false。關於JPA可以配置的更多資訊請參考org.springframework.boot.autoconfigure.orm.jpa.JpaProperties的API文件。

Spring Boot預設會自動掃描Jpa Repository,如果不希望自動掃描Repository,可以配置spring.data.jpa.repositories.enabled=false

本文主要介紹在Spring Boot應用中如何使用Spring Data Jpa,關於Spring Data Jpa的更多應用請參考相應的文件。

(注:本文是基於Spring Boot 2.0.3所寫)


相關文章