1、泛型方法,在大量使用某个重复的方法时,可以封装简化代码量。
如下代码,不是返回类型,而是泛型方法的格式,void才是返回类型,当然T也可以作为返回类型
@SuppressWarnings("static-access")
private <T> void insert(String tableName, int syncCount, List<TFinanceRoutingServer> serverList, int type,
List<T> list) {
JSONObject json = new JSONObject();
int serverCount = serverList.size();
DatabaseContextHolder.setDatabaseType(DatabaseType.dataSource2);
List<String> insertId = new ArrayList<>();
List<TFinanceSplitInfo> tList = new ArrayList<>();
for (TFinanceRoutingServer server : serverList) {
for (T tap : list) {
saveSplit(server, type, json, json.toJSONString(tap), tList);
}
}
insertSplit(tList, serverCount);
int deleteCount = 0;
try {
DatabaseContextHolder.setDatabaseType(DatabaseType.dataSource1);
deleteCount = syncPullService.deleteResult(list, tableName, type, syncCount);
} catch (Exception e) {
for (TFinanceSplitInfo s : tList) {
insertId.add(String.valueOf(s.getId()));
}
roback(insertId);
throw new RuntimeException("删除条数不正确,回滚数据!");
}
updateSplitStatus(tList, deleteCount);
}
2、泛型接口。
如下代码,整套下来代码很清晰,灵活,换个人写代码也便于管控,定义多个重复的class对象(业务即如此)继承一个抽象类AbsBatchReport,这个抽象类再去实现BachReportService接口,注入定义的接口BatchReportMapper,各个层次代码任务分工很分明。
当确定一个业务时,最好是先定义一个接口,此处顺序说
1、在controller层注入相应bachReportService
@Autowired
BachReportService<TFinanceStatProjectFee> projectFeeService;
2、定义service
public interface BachReportService<T> {
List<T> findByCondition(T t);
}
3、service实现时继承一个抽象类,不直接去实现一个接口是,是目前推断以后可能只实现接口部分方法,让抽象类去实现比较好。
注入BatchReportMapper持久层
@Service
public class TFinanceStatPaymentModeImpl extends AbsBatchReport<PaymentMode> {
@Autowired
BatchReportMapper<PaymentMode> batchReportMapper;
@Override
public List<PaymentMode> findByCondition(PaymentMode t) {
return batchReportMapper.findByCondition(t.getProjectId(), t.getTjTime(), null);
}
}
public abstract class AbsBatchReport<T> implements BachReportService<T>{}
4、定义持久层的接口
public interface BatchReportMapper<T> {
List<T> findByCondition(String projectId, String statDate, String execTime);
}
5、各持久层接口去继承统一的接口,便于管控。
public interface TFinanceStatPaymentModeMapper extends BatchReportMapper<TFinanceStatPayMode> {
@Override
@Select("SELECT ID_ FROM T_FINANCE_STAT_PAYMODE WHERE PROJECT_ID_ = #{projectId} AND STAT_DATE_ = #{statDate}")
@Results({ @Result(property = "id", column = "ID_") })
List<TFinanceStatPayMode> findByCondition(@Param("projectId") String projectId,
@Param("statDate") String statDate, String execTime);
}