當前位置:
首頁 > 知識 > Spring Data是什麼?

Spring Data是什麼?

DAO是標準的持久方法 - 所有的訪問是通過數據訪問對象(DAO)完成。這完全將與持久性機制的具體細節與系統的其餘部分隔離。聽起來很容易,但任何曾經做過一個不是很簡單項目的人都大傷腦筋,因為 DAO代碼很無聊,它有很多非常相似的代碼,稍微有輕微錯誤可能會造成大的錯誤。更糟糕的是它違反了不要重複自己(DRY)的原則,因為大部分的信息在JPA註解實現。

什麼是Java世界的終極DRY實現?其實很簡單 - 就是一個介面。給定一個介面和一個模板,我們可以使用CGLIB在應用程序啟動時生成必要的類。雖然有輕微的性能損失,但相比它的好處還是值得的。

比如有一個實體Student:

@Entity

public class Student {

private Integer id;

private String uuid;

private String name;

private String emailAddress;

private Integer creditHours;

@Id

public 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; }

@Column

public 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; }

@Column

public Integer getCreditHours() { return creditHours; }

public void setCreditHours(Integer creditHours) { this.creditHours = creditHours; }

}

它的介面如下:

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 recognized

Student 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();

}

除了find以外,還可以使用以下謂語:

  • And
  • Or
  • Between
  • LessThan
  • GreaterThan
  • IsNull
  • IsNotNull
  • NotNull
  • Like
  • NotLike
  • OrderBy
  • Not
  • In
  • NotIn
  • IgnoreCase

注意的是,不必要我們實現這個介面,CGLIB會自動產生實現類。 我們直接使用就可以了。

public interface StudentExtras {

Student flogStudent(Student student);

}

@Repository

public interface StudentRepository extends CrudRepository<Student, Integer>, <em>StudentExtras</em> { }

// 這個類並沒有實現 StudentRepository!

public class StudentRepositoryImpl implements StudentExtras {

public Student flogStudent(Student student) { ... }

}

Spring Data還透明支持NoSQL資料庫: MongoDB (documents), Neo4j (graph), Redis (key-value), Hadoop (map-reduce) 和 GemFire.

Spring Data 還支持分頁,通過繼承PagingAndSortingRepository介面,不是繼承CrudRepository interface.。

Spring Data是什麼?

打開今日頭條,查看更多圖片
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

std::vector::push_back和std::vector::emplace_back的區別

TAG:程序員小新人學習 |