1 Aralık 2020 Salı

SpringData JPA @Query Anotasyonu nativeQuery Alanı

Giriş
SpringData JPA ile

1. Derived Query
2. Custom Query
  2.1 JPQL custom query
  2.2. Native Custom Query kullanılabilir

Bu yazıda 2.2 maddesindeki Native Custom Query anlatılıyor. Native Query ile veri tabanına direkt gönderilen SQL kastediliyor. 

Kullanım
- Native Query ile JPA'daki nesne tipinden sonuç döndürülebilir.
- Native Query ile insert/update, sort gibi işlemler yapılabilir.
- Native Query ile Projection döndürülebilir.
- Native Query ile "named parameter binding" yapılabilir. Yani SQL içinde ":foo" şeklide parametre isimleri olur
- Native Query ile "positional parameter binding" kullanılıp kullanılmadığını bilmiyorum

Örnek
Şöyle yaparız
@Query(value = "SELECT * FROM USERS u WHERE u.status = 1", nativeQuery = true)
Collection<User> findAllActiveUsersNative();
Örnek
Şöyle yaparız. Burada tek bir sütun çekildiği için Long listesi döndürülüyor
@Query(value="SELECT field FROM complex_innerquery", nativeQuery=true)
Collection<Long> getAllFieldValues();
Örnek
Şöyle yaparız. Burada birden fazla sütun çekildiği ancak nesnenin tamamı çekilmediği için Object[] listesi döndürülüyor
@Repository
public interface BatterRepository extends JpaRepository<Batter, Long> {
  @Query(value = "SELECT tb.id AS id, tb.title AS title FROM " +
            "  tbl_batter tb " +
            "WHERE tb.`title` LIKE %:searchKey%", nativeQuery = true)
  List<Object[]> getData(@Param("searchKey") String searchKey);
}
Örnek

Stored procedure çağırmak için şöyle yaparız.
@Query(value="EXEC dbo.spChartPracticeInternalDoctor ?, ?, ?, ?", nativeQuery = true)
List<ReportDataSet> foo(Long id, Date date,Long months, String tests);

Hiç yorum yok:

Yorum Gönder