【发布时间】:2014-10-21 18:01:02
【问题描述】:
当我第一次学习编码时,我被告知要为 DAO 编写通用接口。不建议设计“findByName”之类的接口,因为 findByName 与业务逻辑(名称)相关。我使用hibernate的Criteria来编写通用接口,效果很好。最近在使用mybatis,但是接口的通用性很难保持,因为我必须自己写sql。我写了很多这样的方法:
T find(QueryTuple queryTuple);
public class QueryTuple {
private String key;
private Object value;
//This is an enum
private CompareOperqator operator;
// setter and getter
}
我这样调用 find 方法:
find(new QueryTuple("name", "tom", CompareOperqator.EQUAL));
find(new QueryTuple("gender", "m", CompareOperqator.EQUAL));
但是如果我想写一些复杂的查询,我不能保持接口那么“通用”,我必须写findByXXAndXX这样的接口。
保持所谓的“通用”真的好吗?我发现Spring数据也支持findByXX这样的接口。
【问题讨论】:
-
mybatis API 已经是一个通用的 DAO:它允许您定义任何类型的查询并执行它。 DAO 的重点是非泛型,并将查询创建逻辑封装到功能性可重用方法中。