Giriş
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
Kalıtım
Açıklaması şöyle. Yani transaction, sayfalama ve sıralama işlemlerini destekler.
Elimizde şöyle bir kod olsun
Template parametrelerinin açıklaması şöyle
Cache desteği için şöyle yaparız.
count metodu
İmzası şöyle.
İmzası şöyle. İlk metod hariç diğerleri belirtilen entity nesnesini siler.
Şöyle yaparız. deleteBy() ile aynıdır.
Şöyle yaparız.
Şöyle yaparız.
İmzası şöyle.
deleteInBatch metodu
İmzası şöyle.
İmzası şöyle.
Bu metodlar altta aynı kapıya çıkarlar. Sorgu metodları şu isimler ile başlayabilir.
Şu satırı dahil ederiz.
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
MavenŞu satırı dahil ederiz.
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.11.9.RELEASE</version>
</dependency>
Şeklen şöyle
JpaRepository ile findAll(Pageable), findAll(Sort) flush(), saveAndFlush(S) gibi kullanışlı metodlar geliyor
EntityManager İlişkisi
JpaRepository Arayüzü ve EntityManager İlişkisi yazısına taşıdım.
Açıklaması şöyle. Yani transaction, sayfalama ve sıralama işlemlerini destekler.
JpaRepository – which extends PagingAndSortingRepository and, in turn, the CrudRepository. Each of these defines its own functionality:Örnek
- CrudRepository provides CRUD functions
- PagingAndSortingRepository provides methods to do pagination and sort records
- JpaRepository provides JPA related methods such as flushing the persistence context and delete records in a batch
Elimizde şöyle bir kod olsun
interface PaymentMethodsDao extends JpaRepository<PaymentMethods, Integer> {}
Bu sınıftan kalıtınca otomatik olarak şu metodlar gelir.PaymentMethod save(PaymentMethod entity);
Iterable<PaymentMethod> save(Iterable<? extends PaymentMethod> entities);
PaymentMethod findOne(Integer id);
boolean exists(Integer id);
Iterable<PaymentMethod> findAll();
long count();
void delete(Integer id);
void delete(PaymentMethod entity);
void delete(Iterable<? extends PaymentMethod> entities);
void deleteAll();
Iterable<PaymentMethod> findAll(Sort sort);
Page<PaymentMethod> findAll(Pageable pageable);
List<PaymentMethod> findAll();
List<PaymentMethod> findAll(Sort sort);
List<PaymentMethod> save(Iterable<? extends PaymentMethods> entities);
void flush();
PaymentMethod saveAndFlush(PaymentMethods entity);
void deleteInBatch(Iterable<PaymentMethods> entities);
TanımlamaTemplate parametrelerinin açıklaması şöyle
@Repository
public interface UserRepository extends JpaRepository<DataType<data_type,primary_key>>
Şöyle yaparız. Spring'in kuralların uygun yazılan metod imzaları için Spring kod üretir.@Repository
public interface CartRepository extends JpaRepository<Cart, Long> {
...
}
Eğer istersek arayüzün için tamamen boş olabilir. Şöyle yaparız. Bu durumda Spring JpaRepository'den gelen metodları üretir.public interface CustomerRepository extends JpaRepository<Customer, Long> {
// Can be empty or you can more queries like findByXXX().
}
CacheCache desteği için şöyle yaparız.
count metodu
İmzası şöyle.
long count();
delete metoduİmzası şöyle. İlk metod hariç diğerleri belirtilen entity nesnesini siler.
void delete(Integer id);
void delete(PaymentMethod entity);
void delete(Iterable<? extends PaymentMethod> entities);
ÖrnekŞöyle yaparız. deleteBy() ile aynıdır.
productRepository.delete(productId);
ÖrnekŞöyle yaparız.
productRepository.delete(product);
deleteBy metoduŞöyle yaparız.
Long id = ...;
System.out.println("Deleting product with id: " + id);
// Defined in CrudRepository
repo.deleteById(id);
deleteAll metoduİmzası şöyle.
void deleteAll();
Bu metodla ilgili bir şikayet şöyle
The spring boot JPA uses a SELECT * in its deleteAll method as the default implementation. It was reading all rows and then executing the delete method on all of them individually.Couldn’t a simple implementation of the “delete from [table name]” have sufficed?
İmzası şöyle.
void deleteInBatch(Iterable<PaymentMethods> entities);
exists metoduİmzası şöyle.
boolean exists(Integer id);
getX findX metodlarıBu metodlar altta aynı kapıya çıkarlar. Sorgu metodları şu isimler ile başlayabilir.
private static final String QUERY_PATTERN = "find|read|get|query|stream";
Açıklaması şöyle.As you can see, all method names start with find or get. This is a well-known convention in the industry, and it's used by libraries such as Spring Data or Apache DeltaSpike. Methods starting with find return a collection of objects, while methods starting with get return single, ready-to-use values (such as a domain instance, or one of its properties).
getById - Deprecated Kullanmayın
Kod şöyle
@Deprecated
public T getById(ID id) {
return this.getReferenceById(id);
}
getOne - Deprecated Kullanmayın
Kod şöyle
@Deprecated
public T getOne(ID id) {
return this.getReferenceById(id);
}
findAll metodu
findAll yazısına taşıdım.
findByXXX metodu
Derived Query - findByXXX yazısına taşıdım
findById metodu
@Id olarak işaretli alana göre arama yapar. findById yazısına taşıdım
findByXOrderByAsc metodu
ÖrnekŞöyle yaparız.
public interface StudentDAO extends JpaRepository<StudentEntity, Integer>
{
public List<StudentEntity> findAllByOrderByIdAsc();
}
findDistinctByX metodu
findDistinctBy yazısına taşıdım.
İmzası şöyle.
PaymentMethod findOne(Integer id);
flush metoduİmzası şöyle.
void flush();
getFirstX metoduÖrnek
Şöyle yaparız.
public interface MessageJpaRepository extends JpaRepository<MessageEntity, Long> {
MessageEntity getFirstByOrderByRegistrationDesc();
}
save metoduİmzası şöyle.
PaymentMethod save(PaymentMethod entity);
Iterable<PaymentMethod> save(Iterable<? extends PaymentMethod> entities);
List<PaymentMethod> save(Iterable<? extends PaymentMethods> entities);
Metodun için şöyle.@Transactional
public <S extends T> S save(S entity) {
if(this.entityInformation.isNew(entity)) {
this.em.persist(entity);
return entity;
} else {
return this.em.merge(entity);
}
}
saveAndFlush metoduİmzası şöyle.
PaymentMethod saveAndFlush(PaymentMethods entity);
Tabloya yapılan işlemin hemen görülmesi için kullanılır. Şöyle yaparız.@Transactional
public void saveAndGenerateResult(Data data) {
saveDataInTableA(data.someAmountForA);
saveDataInTableB(data.someAmountForB);
callAnAggregatedFunction(data);
}
public void saveDataInTableA(DataA a) {
tableARepository.saveAndFlush(a);
}
public void saveDataInTableA(DataB b) {
tableBRepository.saveAndFlush(b);
}
public void callAnAggregatedFunction() {
// Do something based on the data saved from the beginning in Table A and Table B
}
DiğerJpaRepository ile kullanılan bazı anotasyonlar var.
JPA @NamedQuery Anotasyonu
JpaRepository ile JPA @NamedQuery Anotasyonu yazısına taşıdım
JPA @NamedNativeQuery Anotasyonu
Örnek ver
@Query Anotasyonu
JpaRepository ile @Query Anotasyonu yazısına taşıdım.
Custom Metod
JpaRepository İle Custom Method yazısına taşıdım.
Derived Query
JpaRepository ile Derived Query yazısına taşıdım
Derived Query
JpaRepository ile Derived Query yazısına taşıdım
Hiç yorum yok:
Yorum Gönder