Hil*_*ton 2 java dao jpa spring-boot
我是 Spring Boot 新手,我有一个问题。我将这样介绍它。
DAO 是一种设计模式,它具有三个组成部分。那些是
例如,如果我们得到学生。
学生.java (DTO)
public class Student {
private String name;
private int rollNo;
Student(String name, int rollNo) {
this.name = name;
this.rollNo = rollNo;
}
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
StudentDao.java
import java.util.List;
public interface StudentDao {
public List<Student> getAllStudents();
public Student getStudent(int rollNo);
public void updateStudent(Student student);
public void deleteStudent(Student student);
}
Run Code Online (Sandbox Code Playgroud)
StudentDaoImpl.java
import java.util.ArrayList;
import java.util.List;
public class StudentDaoImpl implements StudentDao {
//list is working as a database
List<Student> students;
public StudentDaoImpl(){
students = new ArrayList<Student>();
Student student1 = new Student("Robert",0);
Student student2 = new Student("John",1);
students.add(student1);
students.add(student2);
}
@Override
public void deleteStudent(Student student) {
students.remove(student.getRollNo());
System.out.println("Student: Roll No " + student.getRollNo() + ", deleted from database");
}
//retrive list of students from the database
@Override
public List<Student> getAllStudents() {
return students;
}
@Override
public Student getStudent(int rollNo) {
return students.get(rollNo);
}
@Override
public void updateStudent(Student student) {
students.get(student.getRollNo()).setName(student.getName());
System.out.println("Student: Roll No " + student.getRollNo() + ", updated in the database");
}
}
Run Code Online (Sandbox Code Playgroud)
这是关于 DAO 的。在Spring Boot中,有JPARepository接口。该接口已声明了诸如 等方法save(), findById()。我们可以使用JPARepository如下。
@Repository
public interface StudentRepository extends JpaRepository<Student, Integer> {
}
Run Code Online (Sandbox Code Playgroud)
然后我们就可以使用这个接口的Controller类了。
软件工程师控制器.java
@RestController
@RequestMapping(value = "student")
public class SoftwareEngineerController {
@Autowired
StudentRepository studentRepository;
//to retrieve all software engineers
@GetMapping("/students")
public List<Studentr> getAllEngineers(){
return studentRepository.findAll();
}
Run Code Online (Sandbox Code Playgroud)
我感觉JPARepository界面和DAO界面都在做同样的任务。(声明处理数据所需执行的基本方法)Spring Boot包含因此JPARepository不再需要DAO位于Spring Boot应用程序内部。是真的吗?我是 Spring Boot 的新手,所以如果你能给我一个很好的解释,我将非常感激。
小智 6
它们基本上是两种设计模式。DAO 模式和存储库模式。所以你不需要同时使用它们。如果您使用存储库模式,则大部分繁重工作都是由 spring data jpa 本身完成的。还可以删除很多样板代码。在您的示例中,您可以使用存储库模式。另外我认为,最好使用服务。您可以调用服务 ( SoftwareEngineerService),然后从服务中调用存储库,而不是直接从控制器调用存储库。所以业务逻辑将保留在服务层。
有关 Repository 与 DAO 的更多详细信息
存储库:它是特定类型对象的存储库 - 它允许您搜索特定类型的对象并存储它们。通常它只会处理一种类型的对象。在你的例子中Student。您不应该与那里的其他实体打交道。
存储库很可能将所有数据存储在同一个表中,而模式并不要求这样做。事实上,它只处理一种类型的数据,这使得它在逻辑上连接到一个主表(如果用于数据库持久性)。
DAO - 数据访问对象(换句话说 - 用于访问数据的对象) DAO 是一个为您定位数据的类(它主要是一个查找器,但通常也用于存储数据)。该模式不限制您存储相同类型的数据,因此您可以轻松拥有一个定位/存储相关对象的 DAO。您可以使用 DAO 类来返回相关但不相同的不同类型的对象。
最后:请注意,这两种模式实际上意味着相同(它们存储数据并抽象对数据的访问,它们的表达都更接近域模型并且几乎不包含任何数据库引用),但它们的使用方式可能略有不同, DAO 更加灵活/通用,而 Repository 更加具体,并且仅限于某种类型。
| 归档时间: |
|
| 查看次数: |
3013 次 |
| 最近记录: |