一、Jpa
Spring Boot 要使用 Jpa ,需要
1. 引入jpa依赖
2. 在主类 Application.java 注解 @EnableJpaRepositories
3. 继承 Repository<T, ID> 接口,该接口有3个常用子接口
- CrudRepository<T, ID>
- PagingAndSortingRepository<T, ID>
- JpaRepository<T, ID>
可使用常用的方法,如
<S extends T> S save(S entity);
<S extends T> Iterable<S> saveAll(Iterable<S> entities);
Optional<T> findById(ID id);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> ids);
long count();
void deleteById(ID id);
4. 自定义查询方法
根据方法名定义查询,关键字
- find...By... / read...By... / query...By... / get...By...
- count...By...
- ...OrderBy...[XxAsc/XxDesc]
- And / Or / IgnoreCase
- Top[n] / First / Distinct
二、使用Spring Boot Jpa
1. 引入 jpa依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2. 开启数据库日志
# application.properties
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace
3. 实体
package com.example.springbootjpa;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import lombok.Data;
import lombok.experimental.Accessors;
@Entity
@Table(name = "customer")
@Accessors(chain = true)
@Data
public class Customer {
@Id
@GeneratedValue
private Integer id;
@Column(nullable = false)
private String name;
@Column(updatable = false)
@CreationTimestamp
private Date createTime;
@UpdateTimestamp
private Date updateTime;
}
4. JpaRepository
package com.example.springbootjpa;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
public interface CustomerRepository extends JpaRepository<Customer, Integer>{
public Customer findFirstByName(String name);
public List<Customer> findTop3ByOrderByIdDescNameAsc();
}
5. 调用
Application.java 主类 使用 @EnableJpaRepositories 注解
Customer c1 = new Customer().setName("zhangsan").setCreateTime(new Date());
Customer c2 = new Customer().setName("lisi").setCreateTime(new Date());
customerRepository.save(c1);
customerRepository.save(c2);
log.info("customer count: {}", customerRepository.count());
log.info("customers: {}", customerRepository.findAll());
Optional<Customer> findOne = customerRepository.findOne(Example.of(new Customer().setName("lisi"),
ExampleMatcher.matching().withMatcher("name", GenericPropertyMatchers.exact())));
if (findOne.isPresent()) {
log.info("findOne: {}", findOne.get());
}
Customer findFirstByName = customerRepository.findFirstByName("lisi");
log.info("findFirstByName: {}", findFirstByName);
List<Customer> findTop3ByOrderByIdDescNameAsc = customerRepository.findTop3ByOrderByIdDescNameAsc();
log.info("findTop3ByOrderByIdDescNameAsc: {}", findTop3ByOrderByIdDescNameAsc);