標籤:持久化 enc 增刪改查 mod order by append void 代碼 mes
JPA:Java Persistence API 是java持久化規範。它為java開發人員提供了一種對象/映射工具來管理java應用中的關係資料。目的是為了簡化持久化開發工作和整合ORM技術。
Spring Data JPA 是Spring基於ORM架構、JPA規範的基礎上封裝的一套JPA應用程式框架。可使得開發人員用極簡的代碼即可實現對資料的訪問和操作。
Spring Data JPA預設產生了一些基本的增刪改查。
List<T> findAll(); List<T> findAll(Sort var1); List<T> findAll(Iterable<ID> var1); <S extends T> List<S> save(Iterable<S> var1); void flush(); <S extends T> S saveAndFlush(S var1); void deleteInBatch(Iterable<T> var1); void deleteAllInBatch(); T getOne(ID var1); <S extends T> List<S> findAll(Example<S> var1); <S extends T> List<S> findAll(Example<S> var1, Sort var2);
自訂動作:
具體的關鍵字,使用方法和生產成SQL如下表所示
| Keyword |
Sample |
JPQL snippet |
| And |
findByLastnameAndFirstname |
… where x.lastname = ?1 and x.firstname = ?2 |
| Or |
findByLastnameOrFirstname |
… where x.lastname = ?1 or x.firstname = ?2 |
| Is,Equals |
findByFirstnameIs,findByFirstnameEquals |
… where x.firstname = ?1 |
| Between |
findByStartDateBetween |
… where x.startDate between ?1 and ?2 |
| LessThan |
findByAgeLessThan |
… where x.age < ?1 |
| LessThanEqual |
findByAgeLessThanEqual |
… where x.age ? ?1 |
| GreaterThan |
findByAgeGreaterThan |
… where x.age > ?1 |
| GreaterThanEqual |
findByAgeGreaterThanEqual |
… where x.age >= ?1 |
| After |
findByStartDateAfter |
… where x.startDate > ?1 |
| Before |
findByStartDateBefore |
… where x.startDate < ?1 |
| IsNull |
findByAgeIsNull |
… where x.age is null |
| IsNotNull,NotNull |
findByAge(Is)NotNull |
… where x.age not null |
| Like |
findByFirstnameLike |
… where x.firstname like ?1 |
| NotLike |
findByFirstnameNotLike |
… where x.firstname not like ?1 |
| StartingWith |
findByFirstnameStartingWith |
… where x.firstname like ?1 (parameter bound with appended %) |
| EndingWith |
findByFirstnameEndingWith |
… where x.firstname like ?1 (parameter bound with prepended %) |
| Containing |
findByFirstnameContaining |
… where x.firstname like ?1 (parameter bound wrapped in %) |
| OrderBy |
findByAgeOrderByLastnameDesc |
… where x.age = ?1 order by x.lastname desc |
| Not |
findByLastnameNot |
… where x.lastname <> ?1 |
| In |
findByAgeIn(Collection ages) |
… where x.age in ?1 |
| NotIn |
findByAgeNotIn(Collection age) |
… where x.age not in ?1 |
| TRUE |
findByActiveTrue() |
… where x.active = true |
| FALSE |
findByActiveFalse() |
… where x.active = false |
| IgnoreCase |
findByFirstnameIgnoreCase |
… where UPPER(x.firstame) = UPPER(?1) |
自訂SQL查詢
其實Spring data 覺大部分的SQL都可以根據方法名定義的方式來實現,但是由於某些原因我們想使用自訂的SQL來查詢,spring data也是完美支援的;在SQL的查詢方法上面使用@Query註解,如涉及到刪除和修改在需要加上@Modifying.也可以根據需要添加 @Transactional 對事物的支援,查詢逾時的設定等
@Modifying@Query("update User u set u.userName = ?1 where u.id = ?2")int modifyByIdAndUserId(String userName, Long id);@Transactional@Modifying@Query("delete from User where id = ?1")void deleteByUserId(Long id); @Transactional(timeout = 10)@Query("select u from User u where u.emailAddress = ?1") User findByEmailAddress(String emailAddress);
微服務 第六章 springboot 通過Spring-data-jpa 配置Oracle資料來源(Spring-data-jpa詳細介紹)