مخازن داده بهار – جامعه dev

هیچ داده های بهاری، یکی مخزن این رابط کاربری است که لایه پایداری را انتزاع می کند و به ما امکان می دهد تا به سادگی و به صورت اعلامیه با پایگاه داده ارتباط برقرار کنیم. این استاندارد را دنبال می کند مخزن انجام دادن طراحی دامنه محور (DDD)این امکان را به شما می دهد تا بیشتر روی منطق کسب و کار تمرکز کنید تا جزئیات دسترسی به داده ها. داده های بهار چندین پیاده سازی را ارائه می دهند مخازن این امر باعث ایجاد عملیات CRUD (ایجاد ، خواندن ، به روزرسانی ، حذف) و نمایش داده شد.
انواع بازپرداخت داده های غیرپرست
-
شبه برزنی
- مسئولیت: عملیات اساسی CRUD را ارائه می دهد.
-
روشهای مشترک:
-
save(S entity)
: یک نهاد همچنان ادامه دارد. -
findById(ID id)
: یک موجودیت را با شناسه بازیابی می کند. -
findAll()
: همه نهادها را بازیابی می کند. -
deleteById(ID id)
: یک موجودیت توسط شناسه را حذف می کند.
-
- نمونه:
import org.springframework.data.repository.CrudRepository; public interface AutorRepository extends CrudRepository<Autor, Long> { }
-
وابسته به جبهه
-
مسئولیت: گسترش دهید
CrudRepository
و ویژگی های خاصی از JPA، به عنوان صفحه بندی و ترتیب. -
روشهای اضافی:
-
findAll(Pageable pageable)
: صفحه ای از نتایج را بازیابی می کند. -
findAll(Sort sort)
: تمام نتایج را با سفارش بازیابی می کند. -
flush()
: وضعیت جلسه JPA را به روز می کند.
-
- نمونه:
import org.springframework.data.jpa.repository.JpaRepository; public interface AutorRepository extends JpaRepository<Autor, Long> { }
-
مسئولیت: گسترش دهید
-
PagingAndsortingRepository
- مسئولیت: ویژگی های صفحه بندی و سفارش را ارائه می دهد ، اما بدون ویژگی های پیشرفته JPA.
- نمونه:
import org.springframework.data.repository.PagingAndSortingRepository; public interface AutorRepository extends PagingAndSortingRepository<Autor, Long> { }
-
روشهای پرس و جو
- داده های بهار به شما امکان می دهد بدون نوشتن SQL یا JPQL ، پرس و جوهای شخصی را از نام روش ایجاد کنید.
- مثال:
public interface AutorRepository extends JpaRepository<Autor, Long> { List<Autor> findByNome(String nome); List<Autor> findByDescricaoContaining(String descricao); }
در این مثال ، داده های بهار بر اساس نام روش نمایش داده شد (findByNome
با findByDescricaoContaining
) ، که برای مشاوره ترجمه شده اند jpql به طور خودکار
-
Query
- برای پرس و جوهای پیچیده تر یا خاص تر ، می توانید از حاشیه نویسی استفاده کنید
@Query
نوشتن JPQL یا SQL بومی مستقیماً در مخزن. - مثال:
@Query("SELECT a FROM Autor a WHERE a.nome = ?1") List<Autor> findByNomeAutor(String nome);
- برای پرس و جوهای پیچیده تر یا خاص تر ، می توانید از حاشیه نویسی استفاده کنید
همچنین می توان از SQL بومی استفاده کرد:
@Query(value = "SELECT * FROM autor WHERE nome = ?1", nativeQuery = true)
List<Autor> findByNomeAutorNative(String nome);
مشاوره پویا با Querydsl
برای مشاوره های پویا و پیچیده تر ، می توانید از پرس و جو یکپارچه با داده های بهار. این امر به شما امکان می دهد تا بر اساس معیارهایی که به صورت پویا تعریف می کنید ، به صورت برنامه ریزی و انعطاف پذیر مشاوره ایجاد کنید.
import com.querydsl.core.types.dsl.StringPath;
import com.querydsl.core.types.dsl.NumberPath;
import com.querydsl.jpa.impl.JPAQuery;
QAutor autor = QAutor.autor;
JPAQuery<Autor> query = new JPAQuery<>(entityManager);
List<Autor> autores = query.select(autor)
.from(autor)
.where(autor.nome.eq("Nome"))
.fetch();
پشتیبانی معاملات
داده های بهار تضمین می کند که معاملات با خیال راحت و کارآمد انجام می شوند. معاملات را می توان مستقیماً در مخزن یا سرویس کنترل کرد (با استفاده از @Transactional
).
مثال استفاده از @Transactional
:
import org.springframework.transaction.annotation.Transactional;
@Service
public class AutorService {
private final AutorRepository autorRepository;
public AutorService(AutorRepository autorRepository) {
this.autorRepository = autorRepository;
}
@Transactional
public Autor criarAutor(Autor autor) {
return autorRepository.save(autor);
}
}
مثال کامل
در اینجا یک نمونه اساسی از یک مخزن برای نویسندگان در یک سیستم:
-
موجودیت
Autor
:
@Entity
public class Autor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
private String nome;
@Email
private String email;
@Size(max = 400)
private String descricao;
// getters e setters
}
- مخزن:
public interface AutorRepository extends JpaRepository<Autor, Long> {
List<Autor> findByNome(String nome);
List<Autor> findByDescricaoContaining(String descricao);
}
- خدمت:
@Service
public class AutorService {
private final AutorRepository autorRepository;
public AutorService(AutorRepository autorRepository) {
this.autorRepository = autorRepository;
}
public Autor cadastrarAutor(Autor autor) {
return autorRepository.save(autor);
}
public List<Autor> buscarAutoresPorNome(String nome) {
return autorRepository.findByNome(nome);
}
public List<Autor> buscarAutoresPorDescricao(String descricao) {
return autorRepository.findByDescricaoContaining(descricao);
}
}
در جدول زیر مقایسه انواع بازپرداخت کنندگان در تاریخ بهار ارائه شده است:
مخزن | شرح | روش های اصلی | از مثال استفاده کنید |
---|---|---|---|
CrudRepository |
عملیات اساسی CRUD را ارائه می دهد. ایده آل برای عملیات ساده. |
save(S entity) با findById(ID id) با findAll() با deleteById(ID id)
|
public interface AutorRepository extends CrudRepository |
JpaRepository |
تمدید کردن CrudRepository و ویژگی های JPA (صفحه و غیره) را اضافه می کند. |
save(S entity) با findById(ID id) با findAll() با findAll(Pageable pageable) با flush()
|
public interface AutorRepository extends JpaRepository |
PagingAndSortingRepository |
روی صفحه بندی و سفارش تمرکز کنید ، اما بدون ویژگی های JPA. |
findAll(Pageable pageable) با findAll(Sort sort)
|
public interface AutorRepository extends PagingAndSortingRepository |
@Query (مشاوره شخصی) |
به شما امکان می دهد نمایش داده شدگان شخصی را با JPQL یا SQL بومی بنویسید. | مشاوره های تعریف شده با حاشیه نویسی @Query
|
@Query("SELECT a FROM Autor a WHERE a.nome = ?1") List |
Querydsl |
به شما امکان می دهد مشاوره های پویا و پیچیده را به صورت برنامه ریزی ایجاد کنید. | با استفاده از API querydsl ، با اشیاء کلاس Q برای ایجاد مشاوره استفاده می شود | QAutor autor = QAutor.autor; JPAQuery |
این جدول به خوبی تفاوت های بین انواع مخازن را خلاصه می کند و بسته به نیاز برنامه ، به انتخاب مناسب ترین کمک می کند.
ملاحظات نهایی
- ای داده های بهاری جزئیات بسیاری از JPA را چکیده و راهی آسان برای دستکاری سریع داده ها ارائه می دهد.
- می توانید اضافه کنید مشاوره شخصی با استفاده از روشها یا حاشیه هابشر
- مخازن به راحتی قابل آزمایش هستند مسخره و همچنین پشتیبانی صفحه بندی اشمیه سفارشبشر