java泛型相关笔记,持续更新中

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);
}

发布了10 篇原创文章 · 获赞 0 · 访问量 350

猜你喜欢

转载自blog.csdn.net/weixin_43137113/article/details/104813636
今日推荐