请问这种代码如何重构优化。
我要根据变量ItemPlanViewName的值来确定查询哪张视图。这个值可能会有40个左右,也就是会有40多张视图
如果按照我现在这样写,到最后这个controller里面将会注入40多个service。并且会写40多个ifelse以及40多个mapper接口和mapper.xml文件
可是如果不这样写,我又不知道如何确定我查询的是哪张视图以及在xml里映射到哪个实体类中。
反射,根据你的字符串,做一个变换,得到对应的xxxService类型的类名,然后反射调用它的findbyrssid方法
写个公用的Mapper文件,把sql传过去就OK了,你只需要在controller 里把sql拼好就行了。
反射调用object方法
http://blog.csdn.net/zhangzeyuaaa/article/details/42522015
你这40个view结构应该是相同的吧,可以考虑加个interceptor,在发sql之前根据条件修改sql语句,这样就不用建多个pojo,相当灵活,可以尝试下。
先抽象一个通用的类,然后用工厂模式及策略模式。这样以后扩展方便。
参考:http://www.importnew.com/21224.html
写个公用的Mapper文件,把sql传过去就OK了,你只需要在controller 里把sql拼好就行了
可以用集合解决,条件存入集合A,对应的类存入集合B,例如:
List<String> listA = new ArrayList<>();
List<BaseService> listB = new ArrayList<>();//BaseService是你所有service的父类
//一一对应添加。(第一次)
listA.add("V_VPP_PLS_SEQ_ITEM_PLT");
listB.add(vPpPlsSeqItemPltSerice);//vPpPlsSeqItemPltSerice继承BaseService
//一一对应添加。(第二次)
listA.add("V_VPP_PLS_SEQ_ITEM_CA1");
listB.add(vPpPlsSeqItemCa1Serice);//vPpPlsSeqItemCa1Serice继承BaseService
...
你可以把添加数据再优化一下
写一个枚举的类专门用来存这个视图 然后用case when