עץ האנוטציה @Repository ב- Spring משמש לציון שהמחלקה מספקת את המכניזם לאחסון, שליפה, חיפוש, עדכון ומחיקה של אובייקטים.
אנוטציה @Repository ב- Spring
היא התמחות של אנוטציה @Component של Spring, ולכן מחלקות ה־Spring Repository יכולות להתגלות אוטומטית על ידי סביבת ה־spring framework דרך סריקה ב־classpath. Spring Repository דומה מאוד לתבנית DAO בה מחלקות DAO אחראיות לספק פעולות CRUD על טבלאות במסד נתונים. אולם, אם אתה משתמש ב־Spring Data לניהול פעולות במסד נתונים, אז עליך להשתמש בממשק ה־Spring Data Repository.
דוגמא ל־Spring Repository
בואו נסתכל על דוגמה פשוטה שבה ניצור מחלקת מאגר Spring. לא נשתמש בפעולות בסיס נתונים, במקום זאת נספק מאגר עבור אובייקט. צרו פרויקט Maven ב- Eclipse או בכל IDE אחר שאתם משתמשים בו, ואז הוסיפו תלות של Spring Core.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
התמונה למטה מציגה את מבנה הפרויקט הסופי שלנו ב- Eclipse. בואו ניצור את מחלקת המודל שבה נממש מאגר Spring.
package com.journaldev.spring.model;
public class Employee {
private int id;
private String name;
private String jobTitle;
public Employee() {
}
public Employee(int i, String n, String jt) {
this.id = i;
this.name = n;
this.jobTitle = jt;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
@Override
public String toString() {
return id + "," + name + "," + jobTitle;
}
}
לפני שנממש את מחלקת המאגר, יצרתי ממשק ObjectRepository
ג'נרי לספק את החוזה עבור מחלקת המאגר שלנו לממש.
package com.journaldev.spring.repository;
public interface ObjectRepository<T> {
public void store(T t);
public T retrieve(int id);
public T search(String name);
public T delete(int id);
}
I am using Generics here, it’s a powerful technology to provide loosely coupled contract for the applications to implement. Now let’s look at our Repository class implementation.
package com.journaldev.spring.repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Repository;
import com.journaldev.spring.model.Employee;
@Repository
public class EmployeeRepository implements ObjectRepository<Employee> {
private Map<Integer, Employee> repository;
public EmployeeRepository() {
this.repository = new HashMap<>();
}
@Override
public void store(Employee emp) {
repository.put(emp.getId(), emp);
}
@Override
public Employee retrieve(int id) {
return repository.get(id);
}
@Override
public Employee search(String name) {
Collection<Employee> emps = repository.values();
for (Employee emp : emps) {
if (emp.getName().equalsIgnoreCase(name))
return emp;
}
return null;
}
@Override
public Employee delete(int id) {
Employee e = repository.get(id);
this.repository.remove(id);
return e;
}
}
שימו לב שאני משתמש ב-Map בזכרון לאחסון נתוני האובייקט, אפשר להשתמש גם במנגנונות אחרים.
בדיקת מאגר Spring
המאגר שלנו של Spring מוכן, בואו ניצור מחלקה ראשית ונבדוק אותו.
package com.journaldev.spring;
import java.sql.SQLException;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.journaldev.spring.model.Employee;
import com.journaldev.spring.repository.EmployeeRepository;
public class SpringMainClass {
public static void main(String[] args) throws SQLException {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.journaldev.spring");
context.refresh();
EmployeeRepository repository = context.getBean(EmployeeRepository.class);
// store
repository.store(new Employee(1, "Pankaj", "CEO"));
repository.store(new Employee(2, "Anupam", "Editor"));
repository.store(new Employee(3, "Meghna", "CFO"));
// retrieve
Employee emp = repository.retrieve(1);
System.out.println(emp);
// search
Employee cfo = repository.search("Meghna");
System.out.println(cfo);
// מחק
Employee editor = repository.delete(2);
System.out.println(editor);
// סגור את הקונטקסט של Spring
context.close();
}
}
רק הריצו את המחלקה כאפליקציית Java ואתם אמורים לקבל את הפלט הבא.
1,Pankaj,CEO
3,Meghna,CFO
2,Anupam,Editor
אתם יכולים להוריד את קוד הדוגמה מה- GitHub Repository שלנו.
מקור: מסמך API
Source:
https://www.digitalocean.com/community/tutorials/spring-repository-annotation