gpt4 book ai didi

java - 类似查询的设计模式

转载 作者:行者123 更新时间:2023-11-30 06:04:16 25 4
gpt4 key购买 nike

我有一个类,其中包含多个具有类似目的的方法:从另一个 API 获取联系信息。

界面如下所示:

interface ContactDao {
Contact getContactById(int contactId);
Contact getContactByContactGroup(int contactGroupId);
}

是否有设计模式或解决方案来减少获取联系人的方法数量?

我提到了https://thinkinginobjects.com/2012/08/26/dont-use-dao-use-repository/到目前为止。

最佳答案

您可以使用“选择条件”对象。

public class ContactCriteria {

private Integer type;
private Integer val;

public Integer getType() {
return type;
}

public Integer getVal() {
return val;
}

}

interface ContactDao {
Optional<Contact> getContact(ContactCriteria criteria);
List<Contact> getContacts(ContactCriteria criteria);
}

构建查询时,您检查给定条件是否存在,如果存在,则构建相应的查询谓词(使用某些查询构建工具)。谓词用 AND 连接。以下示例基于 QueryDSL:

import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Predicate;

public class ContactPredicate {
private static QContact contact = QContact.contact;
private ContactPredicate() {}

public static Predicate forCriteria(ContactCriteria criteria) {
BooleanBuilder predicate = new BooleanBuilder();

if (criteria.getType() != null) {
predicate.and(contact.type.eq(criteria.getType()));
}
if (criteria.getVal() != null) {
predicate.and(contact.val.eq(criteria.getVal()));
}
return predicate;
}

}

这是一个简单的例子。您可以构建更复杂的条件->谓词(例如日期范围等)

关于java - 类似查询的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51691418/

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