日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

什么是Spring Data?

發布時間:2023/12/3 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是Spring Data? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(這與“學生計劃”有關,稍后我將重新討論該主題。)

Spring Data在最近的幾次采訪中獲得通過。 什么是Spring Data ?

為了回答這個問題,讓我們考慮持久性的標準方法–所有訪問都是通過數據訪問對象 (DAO)進行的。 這將系統的其余部分與持久性機制的特定細節完全隔離開來。 這聽起來很容易,但是任何曾經做過一個不平凡的項目的人都知道這是一個很大的麻煩。

DAO代碼很無聊。

它是單調的,它具有很多非常相似的代碼,并且輕微的錯誤可能會導致很多損壞。 更糟糕的是,它違反了“ 不要自己重復” (DRY)的原則,因為大多數信息已在JPA批注中捕獲。

這是一個很大的問題,已經有多年的代碼生成工具了。 從理論上講,他們解決了問題,但在實踐中,他們介紹了自己的問題。 例如,需要自定義配置文件或注釋。

將接口用作DRY合同

Java世界中最終的DRY合同是什么? 這很簡單–它是一個接口。 給定一個接口和一個模板,我們可以使用CGLib在應用程序啟動過程中即時生成必要的類。 雖然性能略有下降,但與優點相比還是比較適中的。

學生.java

@Entity public class Student {private Integer id;private String uuid;private String name;private String emailAddress;private Integer creditHours;@Idpublic Integer getId() { return id; }public void setId(Integer id) { this.id = id; }@Column(unique=true)public String getUuid() { return uuid; }public void setUuid(String uuid) { this.uuid = uuid; }@Columnpublic String getName() { return name; }public void setName(String name) { this.name = name; }@Column(unique=true)public String getEmailAddress() { return emailAddress; }public void setEmailAddress(String emailAddress) { this.emailAddress; }@Columnpublic Integer getCreditHours() { return creditHours; }public void setCreditHours(Integer creditHours) { this.creditHours = creditHours; } }

我們的界面會是什么樣?

倉庫/StudentRepository.java

import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository;@Repository public interface StudentRepository extends CrudRepository<Student, Integer> {// this could also be getByUuid() or fetchByUuid() - all are recognizedStudent findStudentByUuid(String uuid);Student findStudentByEmailAddress(String emailAddress);List<Student> findStudentsByNameLike(String pattern);// we can use a custom query@Query("select s from Student s where s.creditHours < 15")List<Student> findFreshmen(); }

等等。 總共有15個謂詞可以單獨使用或組合使用。

  • 要么
  • 之間
  • 少于
  • 比...更棒
  • 一片空白
  • IsNotNull
  • 不為空
  • 喜歡
  • 不喜歡
  • 按訂單
  • 不在
  • 忽略大小寫

注意,沒有必要實現此接口! CGLib為我們解決了這一問題。

定制方法

有時我們需要編寫我們自己的DAO方法。 它們很容易集成到生成的代碼中。

public interface StudentExtras {Student flogStudent(Student student); }@Repository public interface StudentRepository extends CrudRepository<Student, Integer>, <em>StudentExtras</em> { }// this class does NOT implement StudentRepository! public class StudentRepositoryImpl implements StudentExtras {public Student flogStudent(Student student) { ... } }

自定義方法必須是特定的類(由于按約定進行配置),但不受其他限制。

NoSQL

Spring Data還透明地支持NoSQL數據庫:Mondo(文檔),Neo4j(圖形),Redis(鍵值),Hadoop(映射減少)和GemFire。

分頁

最后,我們有分頁的問題。 用戶界面通常僅查看可用信息的子集,例如25個項目的頁面。 分頁并不困難,只是無聊且容易出錯。

Spring Data通過擴展PagingAndSortingRepository接口而不是CrudRepository接口來支持分頁。

參考: 什么是Spring Data? 來自Invariant Properties博客的JCG合作伙伴 Bear Giles。

翻譯自: https://www.javacodegeeks.com/2013/12/what-is-spring-data.html

總結

以上是生活随笔為你收集整理的什么是Spring Data?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。