我正在设计一个数据库,我想存储许多表(大约50个)。对于每个表,我创建了类(例如@Entity类A)。现在,我为每个表创建了管理器类(例如,类AManager)。该类实现对数据库的访问。我试图在一个单独的泛型类中选择常用操作:
public abstract class EntityHelper<T> implements EntityManager<T> {
public String key = "";
public String value = "";
public String table = "";
public Class<T> TClass;
protected final JPAApi jpaApi;
protected final PostExecutionContext ec;
public Class<T> getType() {
return TClass;
}
@Override
public CompletionStage<Stream<T>> list() {
return supplyAsync(() -> wrap(em -> select(em)), ec);
}
public Stream<T> select(EntityManager em){
TypedQuery<T> query = em.createQuery("SELECT t FROM "+table+" t", getType());
return query.getResultList().stream();
}
public <T> T wrap(Function<EntityManager, T> function) {
return jpaApi.withTransaction(function);
}
}
public class DeviceManager extends EntityHelper<Device> {
@Inject
public DeviceManager(JPAApi api, PostExecutionContext ec) {
super(api, ec);
super.table = Device.TABLE_NAME;
super.TClass = Device.class;
}
}
但我仍然有样板代码。 什么是最小化样板的最佳实践?
P.S。抱歉我的英文。