【Spring技術棧】初識Spring Data JPA
一、什麼是JPA
1、JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0註解或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中。
- 實現:EclipseLink、Hibernate、Apache OpenJPA
二、JPA核心概念
1、實體
- 實體表示關聯式資料庫中的表
- 每個實體例項對應於該表中的行
- 類必須用javax.persistense.Entity註解
- 類必須有一個public或者protected的無引數的建構函式
- 實體例項被當作值以分離物件方式進行傳遞(例如通過會話bean的遠端業務介面),則該類必須實現Serializable介面
- 唯一的物件識別符號:簡單主鍵(javax.persistence.Id)、複合主鍵(javax.persistence.Embeddedld和javax.persistence.IdClass)
2、關係
- 一對一
- 一對多
- 多對一
- 多對多
3、EntityManager
EntityManager介面
- 定義用於與永續性上下文進行互動的方法
- 建立和刪除持久實體例項,通過實體的主鍵查詢實體
- 允許在實體上執行查詢
獲取EntityManager例項
@PersistenceUnit
EntityManagerFactory emf;
EntityManager em;
@Resource
UserTransaction utx;
...
em = emf.createEntityManager();
try{
utx.begin();
em.persist(SomeEntity);
em.merge(AnotherEntity);
em.remove(ThirdEntity);
em.commit();
} catch(Exception e){
utx.rollback();
}
查詢實體
@PersistenceContext
EntityManager em;
public void enterOrder(int custID, CustomerOrder newOrder){
Customer cust = em.find(Customer.class,custID);
cust.getOrders().add(newOrder);
newOrder.setCustomer(cust);
}
三、什麼是Spring Data JPA
- 是更大的Spring Data家族的一部分
- 對基於JPA的資料訪問層的增強支援
- 更容易構建基於使用Spring資料訪問技術棧的應用程式
Spring Data JPA常用介面
CrudRepository
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID>{
<S extends T> S save(S entity);
T findOne(ID primaryKey);
Iterable<T> findAll();
Long count();
void delete(T entity);
boolean exists(ID primaryKey);
}
PagingAndSortingRepository
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID>{
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
根據方法名建立查詢
public interface PersonRepository extends Repository<User, Long>{
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
// 啟用distinct標誌
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
// 給獨立的屬性啟用ignore case
List<Person> findByLastnameIgnoreCase(String lastname);
// 給所有適合的屬性啟用ignore case
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname);
// 啟用ORDER BY
List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
List<Person> findByLastnameOrderByFirstnamedDesc(String lastname);
}
四、Spring Data JPA、Hibernate與Spring Boot整合
1、新增依賴
2、自定義Hibernate版本
3、新增配置
相關文章
- Spring Data JpaSpring
- Spring Data JPA之Spring Data JPA快速入門(三)Spring
- Spring Data Jpa APISpringAPI
- Spring Boot:整合Spring Data JPASpring Boot
- Spring Data JPA 的使用Spring
- Spring Data JPA:解析CriteriaBuilderSpringUI
- Spring Data JPA:解析CriteriaQuerySpring
- spring data jpa查詢Spring
- 瞭解 Spring Data JPASpring
- spring data jpa 小結Spring
- Spring Data JPA中TransactionInterceptorSpring
- Spring Boot with Spring Data JPA (1) - ConceptSpring Boot
- Spring Data JPA原始碼案例Spring原始碼
- Spring Data JPA:解析SimpleJpaRepositorySpring
- Spring Data JPA簡單使用Spring
- Spring Data JPA REST Query CriteriaSpringREST
- JPA/Hibernate/Spring Data概念Spring
- Spring Data JPA 詳盡指南Spring
- spring data jpa 常見用法Spring
- Spring Boot (五)Spring Data JPA 操作 MySQL 8Spring BootMySql
- 一文搞定 Spring Data JPASpring
- SpringBoot整合Spring Data JPASpring Boot
- Spring Data JPA 參考文件三Spring
- Spring-Data-JPA criteria 查詢Spring
- Spring ORM+Hibernate?Out!換 Spring Data JPA 吧!SpringORM
- Spring Data JPA的簡單入門Spring
- Spring Data JPA專案實戰(下)Spring
- @Query註解的用法(Spring Data JPA)Spring
- Spring Data JPA中ConfigurableTransactionManagerSpring
- Spring Data JPA中事務ReactiveTransactionManagerSpringReact
- Spring 初識Spring
- 快速學習 Spring Boot 技術棧Spring Boot
- Spring Boot整合Spring Data JPA進行資料庫操作Spring Boot資料庫
- Spring Boot系列之一:如何快速熟悉Spring技術棧Spring Boot
- Spring Data JPA 實現聯表查詢Spring
- 使用Spring Data Jpa遇到問題彙總Spring
- 提高Spring Data JPA應用程式的效能Spring
- 隨記Spring Data JPA的幾個坑Spring