gpt4 book ai didi

java - 如何实现对 DAO 方法的排序?

转载 作者:行者123 更新时间:2023-11-29 05:03:53 25 4
gpt4 key购买 nike

这个问题是 3 年前由另一个人在这里提出的,但没有最终答案:Specify Ordering to a DAO Method

我的问题是一样的。我有一个 Student 类和一个实现 DAO 的 StudentDAOImpl 类。我如何告诉我的方法 getAll 我希望所有学生按姓名排序,而不将调用者耦合到特定的实现。我想知道有几种方法可以做到这一点,但我想知道最好的做法是什么。

非常感谢您的关注。

public class Student{
private int id;
private String name;

public Student() {
}

public int getId() {
return id;
}

public String getName() {
return name;
}

public void setId(int id) {
this.id = id;
}

public void setName(String name) {
this.name = name;
}

public class Student{} 

public interface StudentDao{
public LinkedList<Student> getAll(Student s, StudentSortCriterion sortBy);
}

public class StudentDaoImpl implements StudentDao{
getAll(...){implementation/SQL Statement}
}

最佳答案

抽象的看这个,需要传入信息如何排序。这可以通过多种方式设计,但为了简单起见,可以排序的属性直接与学生类相关联;那么为什么不为可排序属性定义常量呢?

无论如何,DAO 需要对学生类有深入的了解(因为它必须知道如何创建它们),因此它可以响应学生类定义的参数:

class Student {
public static enum SortCriterion {
ID,
NAME
}
// ...
}

Collection<Student> getAll(SortCriterion sortBy, boolean descending) {
switch (sortBy) {
}
}

这将 DAO 耦合到学生(没有坏处,它已经耦合),但 DAO 用户不需要知道排序是如何实际实现的。

但对于任何正常目的,我宁愿让 DAO 实现排序;如果你无论如何都 getAll() 学生,为什么不使用一个简单的普通比较器,也许很好地嵌入到学生中:

class Student {
public static interface Order {
public final static Comparator<Student> ID = new Comparator() {
// implemetation
}
}
}

使用 DAO 排序的唯一要点是它是否返回由数据库结果集支持的惰性集合。但如果结果集那么大,那你为什么要使用 getAll()?

思考点:排序 DAO 的用例是什么?

关于java - 如何实现对 DAO 方法的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31079582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com