使用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所写)