感觉每次重复写Service很麻烦,所以想着能不能做做一个基础的service(把很多系统自用的方法写这里),然后每次表新建service的时候,直接extends这个基础service不是少写很多代码。
基础service
public class BaseService { protected Model tableClass ; protected String tableName ; //查询 public Map<String, Object> getData(String json) { ...省略代码 map.put("data", tableClass.dao().paginate(1, 10, "select *", " from " + tableName + " order by sequ asc")); ...省略代码 } //新增,更新 @Before(Tx.class) //如果新增或者更新有问题,直接回滚 public Map<String, Object> upData(String json) { ...省略代码 tableClass = JSONObject.parseObject(JSONObject.toJSONString(json), tableClass.getClass()); ...省略代码 tableClass.update(); ...省略代码 } //删除 @Before(Tx.class) //如果删除有问题,直接回滚 public Map<String, Object> delData(String id) { ...省略代码 tableClass.dao().deleteById(id); ...省略代码 } }
业务service
public class SysMenuService extends BaseService{ public SysMenuService(){ super.tableName ="sys_menu"; super.tableClass = new SysMenu(); } }
业务controller
public class SysMenuController extends Controller { SysMenuService service=new SysMenuService(); //查询数据 public void getdata(){ String data =getPara("data"); renderJson(service.getData(data)); } //新增、更新数据 public void updata(){ String data =getPara("data"); renderJson(service.upData(data)); } //删除数据 public void deldata(){ String data =getPara("data"); renderJson(service.delData(data)); } }
请问大神
1、以上代码这么写是否合适,是否还有更好的方法;
2、从性能方面是否合理;
3、追加问一下Db和Model操作,是否性能一致,感觉Db更方便一些;
4、每建立一个表,都要写一个service和一个controller,这块能否有更好的方式,比如写一个通用的,然后动态调用配置文件;
5、最终目标就是自动生成表model,然后数据库里面写配置文件,service和controller就一个(除了特殊方法单独写),然后就可以直接使用了。是否有这样的例子参考。
谢谢!
可以写成抽象类,提供常用的上下文操作、ORM操作
然后各业务Service全部继承这个BaseService,同时实现单列
Controller中直接引用这个单列的Service即可
再高级一点,利用guice实现业务Service的注入
再再高级一点,为每个Model自动生成对应的Service