📜  带有示例的 Spring @Repository 注解

📅  最后修改于: 2022-05-13 01:54:36.470000             🧑  作者: Mango

带有示例的 Spring @Repository 注解

Spring 是最流行的Java EE 框架之一。它是一个开源轻量级框架,允许Java EE 7 开发人员构建简单、可靠且可扩展的企业应用程序。该框架主要侧重于提供各种方法来帮助您管理业务对象。与Java数据库连接 (JDBC)、JavaServer Pages (JSP) 和Java Servlet 等经典Java框架和应用程序编程接口 (API) 相比,它使 Web 应用程序的开发更加容易。该框架使用各种新技术,如面向方面编程 (AOP)、普通Java对象 (POJO) 和依赖注入 (DI) 来开发企业应用程序。现在谈论 Spring Annotation

Spring Framework 中有许多可用的注解。下面列出了一些 Spring 框架注解,在这里我们将讨论最重要的注解之一,即@Repository 注解

  • @必需的
  • @自动连线
  • @配置
  • @ComponentScan
  • @豆
  • @零件
  • @控制器
  • @服务
  • @Repository 等

@Repository 注解

@Repository 注解是@Component注解的一种特殊化,用于表示该类提供了对对象进行存储、检索、更新、删除和搜索操作的机制。虽然它是 @Component 注解的特化,所以 Spring Repository 类是由 Spring 框架通过类路径扫描自动检测到的。这个注解是一个通用的原型注解,它非常接近 DAO 模式,其中 DAO 类负责在数据库表上提供 CRUD 操作。

例子

第 1 步:创建一个简单的 Spring Boot 项目

参考这篇文章在 Eclipse IDE 中创建和设置 Spring Boot 项目并创建一个简单的 Spring Boot 项目。

第 2 步:在 pom.xml 文件中添加 spring-context 依赖项。转到项目中的 pom.xml 文件并添加以下 spring-context 依赖项。

XML

    org.springframework
    spring-context
    5.3.13


Java
package com.example.demo.entity;
  
public class Student {
  
    private Long id;
    private String name;
    private int age;
  
    public Student(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
  
    public Long getId() {
        return id;
    }
  
    public void setId(Long id) {
        this.id = id;
    }
  
    public String getName() {
        return name;
    }
  
    public void setName(String name) {
        this.name = name;
    }
  
    public int getAge() {
        return age;
    }
  
    public void setAge(int age) {
        this.age = age;
    }
  
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}


Java
// Java Program to illustrate DemoRepository File
  
package com.example.demo.repository;
  
public interface DemoRepository {
  
    // Save method
    public void save(T t);
  
    // Find a student by its id
    public T findStudentById(Long id);
  
}


Java
// Java Program to illustrate StudentRepository File
  
package com.example.demo.repository;
  
import com.example.demo.entity.Student;
import org.springframework.stereotype.Repository;
  
import java.util.HashMap;
import java.util.Map;
  
@Repository
public class StudentRepository implements DemoRepository {
  
    // Using an in-memory Map
    // to store the object data
    private Map repository;
  
    public StudentRepository() {
        this.repository = new HashMap<>();
    }
  
    // Implementation for save method
    @Override
    public void save(Student student) {
        repository.put(student.getId(), student);
    }
  
    // Implementation for findStudentById method
    @Override
    public Student findStudentById(Long id) {
        return repository.get(id);
    }
}


Java
package com.example.demo;
  
import com.example.demo.entity.Student;
import com.example.demo.repository.StudentRepository;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  
@SpringBootApplication
public class DemoApplication {
  
    public static void main(String[] args) {
          
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.scan("com.example.demo");
        context.refresh();
  
        StudentRepository repository = context.getBean(StudentRepository.class);
  
        // testing the store method
        repository.save(new Student(1L, "Anshul", 25));
        repository.save(new Student(2L, "Mayank", 23));
  
        // testing the retrieve method
        Student student = repository.findStudentById(1L);
        System.out.println(student);
  
        // close the spring context
        context.close();
    }
  
}


第 3 步:在您的项目中创建两个包,并将包命名为“实体”和“存储库”。在实体中,包创建了一个名为 Student 的类。在存储库中,包创建一个名为 DemoRepository 的通用接口和一个名为 StudentRepository 的类。这将是我们最终的项目结构。

第 4 步:创建一个实体类,我们将为其实现一个 spring 存储库。这里我们的实体类是Student。下面是学生的代码。 Java文件。这是Java中的一个简单POJO (Plain Old Java Object)类。

Java

package com.example.demo.entity;
  
public class Student {
  
    private Long id;
    private String name;
    private int age;
  
    public Student(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
  
    public Long getId() {
        return id;
    }
  
    public void setId(Long id) {
        this.id = id;
    }
  
    public String getName() {
        return name;
    }
  
    public void setName(String name) {
        this.name = name;
    }
  
    public int getAge() {
        return age;
    }
  
    public void setAge(int age) {
        this.age = age;
    }
  
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

第 5 步:在实现 Repository 类之前,我们创建了一个通用的 DemoRepository 接口来为我们的存储库类提供要实现的契约。下面是DemoRepository 的代码。 Java文件。

Java

// Java Program to illustrate DemoRepository File
  
package com.example.demo.repository;
  
public interface DemoRepository {
  
    // Save method
    public void save(T t);
  
    // Find a student by its id
    public T findStudentById(Long id);
  
}

第 6 步:现在让我们看看 StudentRepository 类的实现。

Java

// Java Program to illustrate StudentRepository File
  
package com.example.demo.repository;
  
import com.example.demo.entity.Student;
import org.springframework.stereotype.Repository;
  
import java.util.HashMap;
import java.util.Map;
  
@Repository
public class StudentRepository implements DemoRepository {
  
    // Using an in-memory Map
    // to store the object data
    private Map repository;
  
    public StudentRepository() {
        this.repository = new HashMap<>();
    }
  
    // Implementation for save method
    @Override
    public void save(Student student) {
        repository.put(student.getId(), student);
    }
  
    // Implementation for findStudentById method
    @Override
    public Student findStudentById(Long id) {
        return repository.get(id);
    }
}

在这个StudentRepository 中。Java文件中,可以注意到我们添加了@Repository注解,表示该类提供了对对象进行存储、检索、更新、删除和搜索操作的机制。

第 7 步: Spring 存储库测试

所以现在我们的 Spring Repository 已经准备好了,让我们测试一下。转到演示应用程序。 Java文件并参考下面的代码。

Java

package com.example.demo;
  
import com.example.demo.entity.Student;
import com.example.demo.repository.StudentRepository;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  
@SpringBootApplication
public class DemoApplication {
  
    public static void main(String[] args) {
          
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.scan("com.example.demo");
        context.refresh();
  
        StudentRepository repository = context.getBean(StudentRepository.class);
  
        // testing the store method
        repository.save(new Student(1L, "Anshul", 25));
        repository.save(new Student(2L, "Mayank", 23));
  
        // testing the retrieve method
        Student student = repository.findStudentById(1L);
        System.out.println(student);
  
        // close the spring context
        context.close();
    }
  
}

输出:最后,运行您的应用程序,您应该得到如下输出,如下所示: