Spring Data JPA @Query
相隔約七、八年,重回Java工程師,
不再是自己寫自己用的東西,而是跟著團隊寫,
何時開始流行Spring Boot,我也不知道,有種世代落差的感覺
在面試時,面試主管會介紹,我們公司會使用Spring Boot、Spring Cloud、MicroService,在技術自我封閉的狀況下,
我自己用自己 Native的寫法,撰寫的Java,早已更不上別人使用的技術。
等到自己重回Java工程師,就像寫ASP進入了ASP.NET一樣,就像寫ASP.NET Web Form 進入了 ASP.NET MVC一樣,好多新花樣的東西,早搞不懂這些技術了。
幸好以前第一次當Java工程師,至少還有摸到Spring、Hibernate、JPA,一些小觀念如 IoC、DI、AOP 稍維的知道。
只是這次,是沒想到用起來這麼的特殊。
因為工作上,需要特殊的作法去撈資料,可能現有的程式碼沒有參考的地方,
另外又多了一些好奇怪的東西,為什麼只有一個interface就能有實體,誰幫你撰寫了實體?(突然眼花了我)
看了以下這篇文章
https://www.baeldung.com/spring-data-jpa-query
及
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference
突然明白了一些
https://www.baeldung.com/spring-data-derived-queries
當Interface 繼承了 JpaRepository
interface UserRepository extends JpaRepository<User, Integer>
只要method有一些關鍵字,就會自動幫實作相關的方法,而不必實作interface,
他會自動依賴注入實體至這些Repository
如下method撰寫如下
List<User> findByName(String name);
就等於下了 select * from User where name = @name 的意思
如果要客製化,使用自己自訂的SQL呢?
像我需要count,或統計
就可以使用
@Query
@Query("SELECT u FROM User u WHERE u.status = 1")
Collection<User> findAllActiveUsers();
我這篇,主要介紹,一個新概念,以前我七、八年前的Java時代,都沒有的概念,如今讓我震憾到。
可以點進我貼的連結,取得詳細的用法。
我只講述我的新發現。