我有一個從Drupal CMS中檢索數據的Java類。 Drupal中最終會有相當多的內容類型,我需要將它們放入Java並緩存。由於Drupal的工作方式,每種內容類型都是一個單獨的數據庫視圖。通用數據庫方法
我有以下方法,它由服務層調用,它返回一個特定的對象類型。但是,我擔心這些方法對於每種內容類型都會激增。
有人可以提出一種方法,使其更通用?數據庫方法顯示在第二個代碼示例中。我不知道我是否也可以通用,如果它是值得的。也許我可以在第一個方法中調用一個方法,並讓第二個方法使用case語句。
public DeliverySchedule getDeliverySchedule(final String cmsKey) { // <---- make return type (Del Schedule) generic
String cacheKey = TYPEDS + cmsKey;
DeliverySchedule cmsInstance = CMSObjectCache.getCachedCMSObject(cacheKey, DeliverySchedule.class); // Make generic
// Object not found in cache, go to database.
if (cmsInstance == null) {
try {
cmsInstance = getDeliveryScheduleFromDB(cmsKey); // <---- How can I make this generic so I can avoid DRY?
CMSObjectCache.putCachedCMSObject(cacheKey, new CMSObject(DeliverySchedule.class, cmsInstance));
return cmsInstance;
} catch (EmptyResultDataAccessException e) {
return null;
}
} else {
return cmsInstance;
}
}
數據庫訪問方法,專用於內容類型以上:
// Called from above
private List<DeliverySchedule> getDeliverySchedulesFromDB() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
final String sql = "select * "
+ " from cmsutil.delivery_schedules as m "
+ " where m.effdate = (select max(mm.effdate) "
+ " from cmsutil.delivery_schedules as mm "
+ " where mm.cms_key = m.cms_key "
+ " and mm.effdate <= current_date)";
List<DeliverySchedule> listcmsObject = jdbcTemplate.query(sql, new DeliveryScheduleMapper());
return jdbcTemplate.query(sql, new DeliveryScheduleMapper());
}